小编典典

如何使用Redis以原子方式删除与模式匹配的键

redis

在我的 Redis 数据库中,我有许多prefix:<numeric_id>哈希值。

有时我想以原子方式清除它们。如何在不使用某些分布式锁定机制的情况下执行此操作?


阅读 281

收藏
2021-12-29

共2个答案

小编典典

在 bash 中执行:

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

更新

好,我明白了。这种方式怎么样:存储当前的附加增量前缀并将其添加到您的所有键中。例如:

你有这样的价值观:

prefix_prefix_actuall = 2
prefix:2:1 = 4
prefix:2:2 = 10

当您需要清除数据时,首先更改 prefix_actuall(例如设置 prefix_prefix_actuall = 3),因此您的应用程序会将新数据写入键 prefix:3:1 和 prefix:3:2。然后您可以安全地从 prefix:2:1 和 prefix:2:2 中获取旧值并清除旧键。

2021-12-29
小编典典

从 redis 2.6.0 开始,您可以运行以原子方式执行的 lua 脚本。我从来没有写过,但我认为它看起来像这样

EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 prefix:[YOUR_PREFIX e.g delete_me_*]

警告:正如Redis 文档所说,由于性能问题,keys 命令不应用于生产中的常规操作,该命令用于调试和特殊操作。阅读更多

请参阅EVAL 文档

2021-12-29