2012-01-10 152 views

回答

33

這不是一個功能,現在可以一次完成(請參閱DEL documentation中的註釋)。不幸的是,您只剩下使用KEYS,循環播放結果,然後使用DEL刪除每個結果。

如何使用bash幫助一下?

for key in `echo 'KEYS user*' | redis-cli | awk '{print $1}'` 
do echo DEL $key 
done | redis-cli 

要逐步完成它:

  1. echo 'KEYS user*' | redis-cli | awk '{print $1}' - 讓所有的按鍵和去掉你不想要的awk額外的文本。
  2. echo DEL $key - 對於每一個,創建一個回聲語句來刪除它。
  3. | redis-cli - 接收DEL語句並將它們傳回給cli。

不建議這是最好的方法(如果您的某些用戶名中有空格,但希望您明白這一點,您可能會遇到一些問題)。

2

除了orangeoctopus的回答,您不需要echo和pipe,您可以將命令作爲參數傳遞到redis-cli。這意味着你可以做

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'` 
do redis-cli "DEL" "$key" 
done 
43

另一種緊湊的單行我用你想要的是:

redis-cli KEYS "user*" | xargs redis-cli DEL 
+1

這很好,謝謝。很遺憾,Redis本身並沒有這個功能。 – snapfractalpop 2013-05-09 20:01:01

+3

如果你有多個數據庫(密鑰空間),那麼這是一個訣竅:假設你需要刪除db3中的密鑰:'redis-cli -n 3 KEYS「前綴:*」| xargs redis-cli -n 3 DEL' – Christoffer 2013-05-19 18:12:58

+0

如果您需要在執行刪除命令之前提供AUTH(即登錄),是否有單行程? – thames 2013-11-14 00:39:04

0

我知道這是舊的,但對於那些你來這裏形成谷歌:

我剛剛向npm和github發佈了一個命令行界面實用程序,允許您從Redis數據庫中刪除與給定模式(即使,或者您詢問用戶)相匹配的鍵。

你可以在這裏找到實用程序:

https://www.npmjs.com/package/redis-utils-cli

1

使用awk,使用redis-cli KEYS指揮和管redis-cli DEL命令Redis的找到所有匹配的密鑰。

redis-cli KEYS "user*" | awk '{ system("redis-cli DEL " $1) }' 
0

當使用oneliner時,可以編輯模式以防它轉義特定字符。例如,要刪除模式,比如 '\ B測試\ B' 使用:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del 
0

使用此功能可以去除具有反斜線,引號,雙引號或空格的Redis鍵:

redis-cli KEYS "user*" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | sed "s/'/\\\\'/g" | sed 's/ /\\ /g' | xargs redis-cli DEL