在Redis中,如何删除密钥?


Answers:


56

此功能目前无法一口气完成(请参阅DEL文档中的注释)。不幸的是,您只能使用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 -为每一个创建一个echo语句以将其删除。
  3. | redis-cli -取DEL语句,然后将它们传递回cli。

不建议这样做是最好的方法(如果某些用户名中包含空格,则可能会出现问题,但希望您能理解这一点)。


69

我用来做您想要做的另一种紧凑的单面纸是:

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

1
太好了,谢谢。可悲的是Redis本身没有此功能。
snapfractalpop

7
如果您有多个数据库(键空间),那么这就是窍门:假设您需要删除db3中的键:redis-cli -n 3 KEYS "prefix:*" | xargs redis-cli -n 3 DEL
Christoffer

如果需要在执行delete命令之前提供AUTH(即登录名),是否有一个内衬?
泰晤士河

'redis-cli help'说:-a <密码>连接到服务器时使用的密码。希望能帮助到你。
user1151446

我对此有疑问。如果您有许多条目要删除,最好使用以下基于awk的条目。
拉斐尔


4

除了orangeoctopus的答案,您不需要echoand管道,您可以将命令作为参数传递给redis-cli。这意味着你可以做

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

2

使用awk,使用redis-cli KEYS命令查找所有Redis匹配的键,然后使用管道连接到redis-cli DEL命令。

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

1

使用此命令删除带有反斜杠,双引号,双引号或空格的redis键:

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



0

使用oneliner时,可以编辑图案以防转义特定字符。例如,要删除“ \ b test \ b”之类的模式,请使用:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.