如何从 redis-cli repl 中删除 Redis 匹配模式中的所有键?
How to delete all keys in Redis matching pattern from within redis-cli repl?
我正在尝试使用 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
工具中删除前缀下的所有键?命令行是实现此目的的唯一方法吗?
如果您希望我澄清更多,请随时发表评论。
您可以编写 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 中的这个命令:
EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 prefix:*
用您需要的模式替换prefix:*
。输出将是删除的键数。
我正在尝试使用 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
工具中删除前缀下的所有键?命令行是实现此目的的唯一方法吗?
如果您希望我澄清更多,请随时发表评论。
您可以编写 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 中的这个命令:
EVAL "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 prefix:*
用您需要的模式替换prefix:*
。输出将是删除的键数。