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

6

我想使用 redis-cli 删除一组匹配前缀的键。

我在网上研究了如何做到这一点,最常见的建议是直接从命令行中执行,就像这样:

$ redis-cli [options] KEYS "prefix:*" | xargs redis-cli [options] DEL

然而,我更愿意在redis-cli 工具内部完成这项操作,以便每次想要删除与模式匹配的键时不必在cli命令中传递主机名、端口和auth参数。到目前为止,我尝试过:

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

是否有办法从redis-cli 工具内部删除前缀下的所有键? 命令行是唯一实现此目的的方法吗?

如果您需要我进一步澄清,请随时发表评论。

2个回答

10

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

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

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


2
你可以编写一个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-cli中调用脚本,像这样:

EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*

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