• shell脚本清空redis库缓存


      

    前提:

    现在做的一个业务系统,用了redis做缓存。

    系统做了缓存,通常在系统正常使用的过程中,可以节省很多系统资源,特别是数据库资源。

    但是,在开发、测试或者系统遇到问题的时候,也有很麻烦的事情。

    通常的表现是,明明数据已经改了,在plsql develop 里面是正常的,为什么系统里面是没变化,接口也没有变。

    然后,顺着线路找去,在日志里面看到,原来是走了缓存,数据没有更新。

    或者是,重跑数据的时候,怎么系统里面都没有值,找了一圈,发现走了缓存。

    还有个终极的BUG,在客户现象,因为要共有一个数据库,搭了两套tomcat环境,然后使用了同一个redis集群,

    还是同一个库,导致现网环境,相同的接口,出现的数据五花八门,导致客户严重不满意。

    经查,一个同事,在测试接口的时候,测试数据,写入redis缓存中,导致客户看到的数据一直变化。

    问题还巨难定位。

    好像扯远了。。。

    正文。。。。

    由于历史原因,redis使用的是单独的用户,每次测试接口的时候,要去清空数据,需要切换用户,进入目录

    执行 redis-cli -p 6379 ,输入密码,切换库,然后才能flushdb。开发的时候,还没什么事情,写了个jedis的测试类,

    直接把redis指定库清空。

    但是,在客户现场,只能使用teamviewer远程过去,当然也就不能使用测试类了。一般远程还比较卡,用着及其不爽。

    然后还有切来、切去的,烦得不行。

    这样,就萌生了,写个脚本,直接把redis的指定库清空的想法了。

    直接上第一版

    #!/bin/bash
    redis-cli -h localhost -p 6379 -a xxx flushall

    这样,虽然可以带到预期的效果,但就是觉得有点傻,一下全,清空了,其他系统(其他库)的缓存怎么办?

    比较菜,不知道怎么处理,直接一条命令写完,又不行

    reids-cli -h localhost -p 6379 
    auth xxx
    select 15
    flushdb

    当然,这样是不行的,因为,shell脚本,命令是shell的命令,不能写到第一句执行后的redis客户端中。

    最后一版:

    #!/bin/bash
    cd /opt/xxx/xx/redis/bin
    db=15
    #可以用第一个参数指定需求清除的库
    if [ -n "$1" ];then
            db=$1
    fi
    
    /opt/wacos/server/redisha/bin/redis-cli -h localhost -p 6379 -a xxx  <<END
    select ${db}
    flushdb
    END

    把脚本放到任意目录,修改cd的目录,把几号库作为参数传入,默认15号库。

    这个脚本的关键是 "<<END","END"

    shell中,使用 “<<xx” “xx” 标记

    可以将标记中间的命令,一条一条的输入到redis客户端中。就起到了预期的效果。

    其他客户端同理

    oracle:

    #!/bin/bash
    
    sqlplus scot/tiger <<END
    select * from dual;
    END

    输出:

    [oracle@xxx bin]$ ./oracle.sh 
    
    SQL*Plus: Release 11.2.0.1.0 Production on Mon Jan 29 23:19:32 2018
    
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    
    
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> 
    D
    -
    X
    
    SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    其他客户端类似。

    thanks

  • 相关阅读:
    maven生命周期
    snsapi_base和snsapi_userinfo
    MySQL大小写问题
    高德地图JSApi
    方向
    看源码和写demo是一种比较容易提升的方式
    前后端分离,接口API,契约
    java文档操作
    String.getBytes(),源码之下,了无秘密
    myeclipse快捷键(转载)
  • 原文地址:https://www.cnblogs.com/Springmoon-venn/p/8379919.html
Copyright © 2020-2023  润新知