如何从redis-configurerepl中删除Redis中匹配模式的所有键?

4ktjp1zp  于 5个月前  发布在  Redis
关注(0)|答案(3)|浏览(47)

我正在尝试删除一堆与redis-cli前缀匹配的键。
我一直在研究如何在网上做到这一点,我看到的最常见的建议是直接从命令行执行,就像这样:
$ redis-cli [options] KEYS "prefix:*" | xargs redis-cli [options] DEL
但是,我更喜欢在redis-cli工具内部执行此操作,这样我就不必在每次删除匹配模式的密钥时都在redis-cli命令中传递主机名、端口和auth参数。到目前为止,我已经尝试过:

  • DEL "prefix:*"
  • DEL KEYS prefix:*
  • DEL KEYS "prefix:*"
  • KEYS "prefix:*" | DEL
  • KEYS "prefix:*" DEL

有没有办法删除redis-cli工具中 within 前缀下的所有键?命令行是唯一的方法吗?
如果你想让我澄清更多,请随时发表评论。

bweufnob

bweufnob1#

在redis-boot中运行以下命令:

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

字符串
prefix:*替换为您需要的模式。输出将是删除的键的数量。

5lwkijsr

5lwkijsr2#

你可以写一个lua脚本来删除键。

local matches = redis.call('KEYS', ARGV[1])

local result = 0
for _,key in ipairs(matches) do
    result = result + redis.call('DEL', key)
end

return result

字符串
保存这个文件在本地作为delete.lua并运行它,如下所示:

$redis-cli script load "$(cat delete.lua)"

"efe4f6a74ff9baba16d039f892dd09174b9f5777"


这个“$(cat delete.lua)”只是把我们的脚本变成了一个带引号的参数。重要的是返回的数字(十六进制)。它是脚本的SHA1签名。我们可以使用它来调用脚本,在redis-script中使用EVALSHA命令,如下所示:

EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*

l0oc07j2

l0oc07j23#

spring-data-redis-2.7.16中使用RedisCacheWriter.clean(cacheName, keyPattern),即使用SCAN(10/20) + DEL(allMatchKeys) redis命令。

RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(
                redisConnectionFactory, BatchStrategies.scan(10));
redisCacheWriter.clean(cacheName, keyPattern.getBytes(StandardCharsets.UTF_8));

字符串

相关问题