【问题标题】:How to delete all keys in Redis matching pattern from within redis-cli repl?如何从 redis-cli repl 中删除 Redis 匹配模式中的所有键?
【发布时间】:2018-08-09 20:57:28
【问题描述】:

我正在尝试使用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 工具删除前缀下的所有键?命令行是实现此目的的唯一方法吗?

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

【问题讨论】:

    标签: caching redis redis-cli


    【解决方案1】:

    在 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 命令调用脚本,如下所示:

      EVALSHA efe4f6a74ff9baba16d039f892dd09174b9f5777 1 nil prefix:*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 2018-10-14
        • 2019-05-11
        • 1970-01-01
        • 2023-03-21
        • 2020-02-18
        • 2012-05-20
        相关资源
        最近更新 更多