代码之家  ›  专栏  ›  技术社区  ›  Graham S.

如何从Redis cli repl中删除Redis匹配模式中的所有密钥?

  •  4
  • Graham S.  · 技术社区  · 7 年前

    我正在尝试使用删除一组与前缀匹配的密钥 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 工具命令行是实现这一目标的唯一方法吗?

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

    2 回复  |  直到 7 年前
        1
  •  7
  •   Aswin Sanakan    5 年前

    在redis cli中运行此命令:

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

    代替 prefix:* 使用您所需的图案。输出将是删除的密钥数。

        2
  •  2
  •   Monzurul Shimul    7 年前

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

    将此文件保存为本地删除。lua并像这样运行:

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

    “$(cat delete.lua)”只是将我们的脚本转换为引用的参数。重要的位是返回的数字(十六进制)。这是剧本的SHA1签名。我们可以使用此命令在redis cli中使用EVALSHA命令调用脚本,如下所示:

    EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*