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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM