删除与模式匹配的 Redis 键

问题描述 投票:0回答:4

我使用 Redis 哈希集以以下格式存储数据:

hset b1.b2.b3 name test

现在我想删除这个键,所以我使用以下格式:

del b1.b2.*

但它不起作用,那么我如何使用模式删除 Redis 密钥?

redis redis-cli redisclient
4个回答
10
投票

Redis不提供任何批量删除key的方法。但是 redis-cli 和 xargs 可以用来实现您想要做的事情。请参阅以下命令:

127.0.0.1:6379> hset b1.b2.b3 name test
(integer) 1
127.0.0.1:6379> hgetall b1.b2.b3
1) "name"
2) "test"
$ redis-cli --scan --pattern b1.b2.* | xargs redis-cli del
(integer) 1
$ redis-cli
127.0.0.1:6379> hgetall b1.b2.b3
(empty list or set)

我们使用“--scan”扫描redis的模式,并使用xargs方法再次将输出提供给redis-cli,该方法组合了扫描结果中的所有键,最后我们使用“del”命令删除所有键。


1
投票

如果您想通过

redis-cli
批量执行此操作,您可以考虑根据指定模式使所有密钥过期:

EVAL 'for i, name in ipairs(redis.call("KEYS", <pattern>)) do redis.call("EXPIRE", name, 1); end' 0

实际上它将过期时间设置为 1 秒,所以这应该可以解决问题!


0
投票

就我而言,这个命令就像一个魅力:

redis-cli -a myPass keys "*myKeyword*" | xargs -I% redis-cli -a myPass del "%"

-2
投票

你可以使用上面@Ankit回答的模式来做到这一点。

您可以执行

SCAN
,然后删除键,直到什么都不剩(光标为0)

https://redis.io/commands/scan

© www.soinside.com 2019 - 2024. All rights reserved.