一、遇到的問題
在開發的過程中,經常會遇到要批量刪除某種規則的key,如緩存的課程數據“course-課程uid”,其中課程uid是變量,我們需要刪除"course-*"這一類的數據,但是這里就坑了,redis有提供批量查詢一類key的命令keys,但是沒有提供批量刪除某種類型key的命令。
二、解決方案
先看看我們怎么解決。
1、先進入redis的客戶端
cd redis所在目錄/src
./redis-cli
2、初始化數據,模擬數據
127.0.0.1:6379> set course-1 1 OK 127.0.0.1:6379> set course-2 2 OK 127.0.0.1:6379> set course-3 3 OK
3、通過keys命令可以看到,現在有上面的三個key
127.0.0.1:6379> keys course-* 1) "course-3" 2) "course-2" 3) "course-1"
4、退出redis的客戶端
127.0.0.1:6379> exit
5.1、本地批量刪除key
./redis-cli keys "course-*" | xargs ./redis-cli del
此處剛剛 course-* 相關的3個key已經被刪除了
原理解析:
先通過redis客戶端執行了keys命令,模糊搜索出所有的key,通過xargs命令,將前面查詢出來的key作為后面redis的del命令的輸入
最終執行的結果可以理解成
1、模糊查詢
keys "course-*"
查詢出上面的course-1 course-2 course-3 這三個key
2、執行刪除key
del的三個key來自前面的keys查詢
del course-1 course-2 course-3
5.2、遠程批量刪除key
經常我們開發的時候,redis都是公用的,可能redis不在本地我們可以通過redis客戶端遠程進行刪除
./redis-cli -h redis所在服務器ip -p 端口 keys "course-*" |xargs ./redis-cli -h redis所在服務器ip -p 端口 del
三、補充知識
1、遠程某台機子的redis
以下實例演示了如何連接到主機為 127.0.0.1,端口為 6379 ,密碼為 mypass 的 redis 服務上。
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
2、xargs命令
xargs命令是給其他命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。 詳情課件 http://man.linuxde.net/xargs
致謝:感謝您的耐心閱讀!