在我的 Redis 数据库中,我有许多prefix:<numeric_id>哈希值。
prefix:<numeric_id>
有时我想以原子方式清除它们。如何在不使用某些分布式锁定机制的情况下执行此操作?
在 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 中获取旧值并清除旧键。
从 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 命令不应用于生产中的常规操作,该命令用于调试和特殊操作。阅读更多
keys
请参阅EVAL 文档。