94

我想删除匹配“用户*”的键。

如何在 redis 命令行中执行此操作?

4

9 回答 9

92

我用来做你想做的另一个紧凑的单线是:

redis-cli KEYS "user*" | xargs redis-cli DEL
于 2012-11-08T15:09:31.553 回答
59

这不是现在可以一次性完成的功能(请参阅DEL文档中的评论)。不幸的是,您只剩下 using KEYS,遍历结果,然后 usingDEL删除每个结果。

使用 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。

不建议这是最好的方法(如果您的某些用户名中有空格,您可能会遇到一些问题,但希望您明白这一点)。

于 2012-01-10T05:57:17.540 回答
17

现在有一个命令可以删除一个键,即 DEL key [keys]

DEL键...

于 2018-04-23T17:31:12.210 回答
6

使用,使用命令和管道到命令awk从 redis 中查找所有匹配的键。redis-cli KEYSredis-cli DEL

redis-cli KEYS "user*"  | awk '{ system("redis-cli DEL " $1) }'
于 2016-03-18T14:04:01.523 回答
5

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

for key in `redis-cli "KEYS" "user*" | awk '{print $1}'`
 do redis-cli "DEL" "$key"
done
于 2012-03-16T11:50:59.387 回答
2

为了删除 db 3 的所有 redis 键:

redis-cli -n 3 --scan | xargs redis-cli -n 3 DEL
于 2021-06-23T10:37:03.803 回答
1

使用它来删除具有反斜杠、引号、双引号或空格的 redis 键:

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

于 2016-11-25T21:17:43.970 回答
0

我知道这已经过时了,但是对于那些从 Google 来到这里的人:

我刚刚向 npm 和 github 发布了一个命令行界面实用程序,它允许您从 Redis 数据库中删除与给定模式(甚至,或您询问的用户)匹配的键。

您可以在此处找到该实用程序:

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

于 2016-02-24T23:39:58.220 回答
0

使用 oneliner 时,您可以编辑模式以防它转义特定字符。例如,要删除像 '\b test \b' 这样的模式,请使用:

redis-cli --raw KEYS '\\b*' | sed 's/\\b/\\\\b/g' | xargs redis-cli del
于 2016-09-09T09:47:54.620 回答