如何使用一个命令批量删除Redis键

4

现在我已经连接到 Redis,查找一些像这样的密钥:

> keys "user:login:user:*"
user:login:user:62668
user:login:user:61970
user:login:user:63586

......

现在我想删除这些密钥,我尝试过:

keys "user:login:user:*" | xargs del

keys "user:login:user:*" | del

keys "user:login:user:*" | redis-cli xargs del

两个都无法工作,我该如何才能批量删除它们?


请参见 https://dev59.com/P7roa4cB1Zd3GeqPl4bC#61366420。 - LeoMurillo
2个回答

3

更好的方式

虽然@Guy Korland回答了这个问题,但是那种方式可能会导致长期阻塞。我们应该始终记住Redis只使用单线程来操作数据,因此如果您有很多键与user:login:user:*相匹配,或者每个键的类型是带有许多元素的listsethashsorted_set,则删除过程将需要大量时间,Redis 无法响应其他命令。

redis-cli --scan --pattern users:* | xargs redis-cli unlink

使用scanunlink代替keysdel可以避免阻塞。

scankeysunlinkdel之间的区别:

scan vs keys
del vs unlink


1

您需要使用 --raw 参数运行 redis-cli,以便从 redis-cli del 中获取干净的结果作为参数。

redis-cli del `redis-cli --raw keys "user:login:user:*"`

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