2012-01-10 161 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