如何在Redis中删除与特定模式匹配的键

20
如何使用redis-cli删除与特定模式匹配的键。我想从以下列表中删除所有foo。
KEYS *

foo:1
foo:2
bar:1
foo:3
bar:2
foo:4

4
同一主题有多个已回答的问题,例如https://dev59.com/i2865IYBdhLWcg3wEKSZ#23399125。 - Itamar Haber
可能是如何使用Redis原子方式删除匹配模式的键的重复问题。 - bitoiu
不错的解决方案,即使对于超过1000个键的大型集合也适用。 - Ajsti.pl - Maciej Szewczyk
4个回答

48

如在问题的评论中提到的那样,这里已经有很多其他答案了。如果您考虑在生产服务器中使用此方法,请务必阅读上面链接的答案。

我发现用于偶尔的命令行清理最有用的是:

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

来自"如何使用Redis原子删除匹配模式的键".


7
我会使用 "redis-cli --scan",而不是 KEYS。特别是在生产环境中,不建议使用 KEYS。 - Philip P.
我无法使用 -h 作为主机名从远程主机上删除。 - Nitesh Verma
另外,为了澄清Philip所说的,如果你不指定模式,应该使用redis-cli --scan --pattern "*",否则它会选择所有键。 - Dantheman91

5

我想通过模式删除数千个键,在一些搜索后,我发现以下几点:

  • 如果您在Redis上有多个数据库,您应该使用 -n [number] 来确定数据库。
  • 如果您只有少量的键可以使用del命令进行删除,但是,如果存在成千上万的键,最好使用unlink命令,由于 unlink是非阻塞的,而del则会阻塞。有关更多信息,请访问此页面unlink vs del
  • keys 命令与 del 类似,也是阻塞的。

所以,我使用了以下代码来按模式删除键:

 redis-cli -n 2 --scan --pattern '[your pattern]' | xargs redis-cli -n 2 unlink 

我遇到了(error) CROSSSLOT Keys in request don't hash to the same slot的问题。我正在使用以下命令从集群中删除匹配模式为hi*的键:redis-cli -u redis://localhost:6379 --scan --pattern 'hi*' | xargs redis-cli -u redis://localhost:6379 DEL - roottraveller
嗨@roottraveller,我不知道问题出在哪里,但我搜索了一下并找到了这个链接,请检查它是否适用于您 https://dev59.com/41oT5IYBdhLWcg3w6isA - mahdi yousefi
@roottraveller 我也曾经遇到Redis集群的同样问题。其中一个解决方案是逐个删除键,但使用redis-cli --pipe可以加速操作:https://dev59.com/YFQJ5IYBdhLWcg3wf2Ed#66179509 - Jason Hoetger

3
我刚刚发布了一个命令行接口实用程序到npm和github,它允许你从Redis数据库中删除与给定模式匹配(即使是*)的键。您可以在此处找到该实用程序:https://www.npmjs.com/package/redis-utils-cli。请注意,保留了html标签。

2
如果有人想在AWS Elasticache Redis中执行相同的操作,则可以通过SSH连接到EC2服务器,该服务器应该访问AWS Redis服务器,然后您可以使用以下命令。
redis-cli -h <HOST> -p <PORT> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> unlink

使用 AWS Redis 服务器的主机和端口替换主机和端口。

如果您的 Redis 设置需要密码验证,则使用以下内容:

redis-cli -h <HOST> -p <PORT> -a <PASSWORD> --scan --pattern "patter*n" | xargs redis-cli -h <HOST> -p <PORT> -a <PASSWORD> unlink

使用 AWS Redis 服务器的主机、端口和密码替换主机、端口和密码。

您也可以将上述命令用于本地主机。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接