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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从redis-cli repl中删除Redis匹配模式中的所有键?相关的知识,希望对你有一定的参考价值。

我试图删除一堆使用redis-cli匹配前缀的键。

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

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

但是,我更喜欢在redis-cli工具中执行此操作,这样每次我想删除与模式匹配的键时,我都不必在cli命令中传递hostname,port和auth参数。到目前为止,我尝试过:

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

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

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

答案

您可以编写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:*

以上是关于如何从redis-cli repl中删除Redis匹配模式中的所有键?的主要内容,如果未能解决你的问题,请参考以下文章

18 redis-cli 的启动

如何批量删除Redis数据库中的Key

如何在redis中删除与特定模式匹配的键

redis-cli批量删除key

redis-cli批量删除时的坑

Redis批量删除keys