2

我正在尝试删除一堆与前缀匹配的键redis-cli

我一直在研究如何在线执行此操作,我看到的最常见建议是直接从命令行执行,如下所示:

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

但是,我更愿意在工具redis-cli执行此操作,这样每次我想删除与模式匹配的键时,我都不必在 cli 命令中传递主机名、端口和身份验证参数。到目前为止,我已经尝试过:

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

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

如果您希望我澄清更多,请随时发表评论。

4

2 回答 2

6

在 redis-cli 中运行此命令:

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

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

于 2019-11-20T11:50:07.723 回答
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 命令调用脚本,如下所示:

EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*
于 2018-03-01T19:25:19.407 回答