前提:

现在做的一个业务系统,用了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

shell脚本清空redis库缓存的更多相关文章

  1. shell脚本操作mysql库

    shell脚本操作mysql数据库-e参数执行各种sql(指定到处编码--default-character-set=utf8 -s,去掉第一行的字段名称信息-N) 2011-05-11 18:18: ...

  2. 一个shell脚本清空所有vim的配置!!

    这个是从dyl的脚本那里偷过来的哈哈--(其实我现在还不是很懂shell [ -d .vim ] && mv -v .vim .vim.$(stat -c%Y .vim) [ -f . ...

  3. 05【掌握】 SpringBoot 清空Redis所有缓存

    package top.yangbuyi.system.controller; import org.springframework.beans.factory.annotation.Autowire ...

  4. shell脚本部署redis以及redis主从复制和redis-cluster集群

    # 关于脚本: # 使用root用户执行此脚本,提前关闭selinux: # 执行脚本之前,hostsIP内的IP修改成自己的机器IP: # hostsIp内的IP数量如果有增加或者减少,for循环的 ...

  5. 《Linux命令行与shell脚本编程大全》 第十六章 学习笔记

    第十六章:创建函数 基本的脚本函数 创建函数 1.用function关键字,后面跟函数名 function name { commands } 2.函数名后面跟空圆括号,标明正在定义一个函数 name ...

  6. Redis缓存全自动安装shell脚本

    我只是把命令放到shell文件中了,方便安装,代码如下: #!/bin/bash # shell的执行选项: # -n 只读取shell脚本,但不实际执行 # -x 进入跟踪方式,显示所执行的每一条命 ...

  7. 清空Redis缓存

    Redis缓存清理   1.访问redis根目录    cd  /usr/local/redis-2.8.19 2.登录redis:redis-cli -h 127.0.0.1 -p 6379 3.查 ...

  8. 获取redis主从复制链SHELL脚本

    获取redis主从复制链SHELL脚本 vi redisnode.sh #!/bin/sh master_host=$ master_port=$ auth=$ #判断输入密码是否为空,为空则转化为' ...

  9. Shell脚本实现超简洁的在Linux服务器上安装nginx、resin、java、tomcat、redis等程序

    说明: 用平常的方式在Linux服务器上安装程序,需要下载安装包.进入安装包位置.给安装包文件赋予可执行权限.执行安装.设置环境变量--等等一系列复杂的操作.并且如果有关联也需要一个一个的挨着安装.耗 ...

随机推荐

  1. TCL脚本语言基础介绍

    Tcl简介(一):Tcl 语法 Tcl 语法 Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明.如 ...

  2. 160. Intersection of Two Linked Lists (List;Two-Pointers)

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  3. PHP之PDO

    PHP之PDO介绍 PDO为何物? POD(PHP Data Object)扩展在PHP5中加入,PHP6中将默认识用PDO连接数据库,所有非PDO扩展将会在PHP6被从扩展中移除.该扩展提供PHP内 ...

  4. Stealth潜行风格游戏源码(Unity5x)

    官方的Stealth画质看起来不错.Unity 官方说Stealth样例属于中等难度,通过学习Stealth,可以获得:   Create a fully functioning level of a ...

  5. 微信小程序开发——导航失效的解决办法

    异常描述: 使用 navigator 导航,各种属性配置没问题,就是点击死活不跳转. 异常分析: 遇到这种情况,要先考虑的就是当前配置的导航url,是不是已经使用在tabBar中,因为小程序对于nav ...

  6. swift4.2 - 距离传感器

    import UIKit class ViewController: UIViewController { deinit { NotificationCenter.default.removeObse ...

  7. GridView(网格视图)+MotionEvent(触控事件)实现可以拖动排序的网格图

    1.一触碰,就回调onInterceptTouchEvent(MotionEvent ev)事件,每次的触碰都只回调一次,接着只要还没有放手,就一直回调onTouchEvent(MotionEvent ...

  8. gearman中任务的优先级和返回状态

    gearman中任务的优先级和返回状态 一.任务的优先级 同步阻塞调用,等待返回结果 doLow:最低优先 doNomal:正常优先级 doHigh:最优先执行 异步派发任务,不等待返回结果,返回任务 ...

  9. rbac 权限分配, 基于formset实现,批量增加

    这里需要两个知识点: - formset - 自动发现项目中的URL1. 什么是formset: Django中 form组件 或 ModelForm组件,用于做一个表单的验证. 接收前端form表单 ...

  10. ecplise自动提示失效,使用补全自动提示快捷键(Alt+/),但只显示“No Default Proposals”

    在这里设置了自动提示,但是在使用的时候自动提示实现了.甚至使用补全自动提示快捷键(Alt+/),只显示“No Default Proposals”.今天在网上搜索了一下结果,主要有一下几种方法: 1. ...