代码之家  ›  专栏  ›  技术社区  ›  Landon Statis

Redis-删除除一个密钥外的所有密钥

  •  0
  • Landon Statis  · 技术社区  · 11 月前

    我们目前正在使用shell中的此命令来清除Redis数据库:

    redis-cli -h zapi.data.com flushdb
    

    但是,现在我被告知必须删除所有键,除了“zrtt_industry”键。我如何做一个正则表达式,删除除与我的模式匹配的键之外的所有键,该模式为“zrtt_industry”。

    非常感谢!

    2 回复  |  直到 11 月前
        1
  •  0
  •   Akhil Singh    11 月前

    不幸的是,Redis不提供本机负匹配模式或内置命令来刷新除特定键之外的所有键。您必须检索所有密钥,然后在删除之前将其过滤掉。

    使用shell管道的方法: 1.列出所有带有redis-cli键“*”的键。 2.使用grep-v排除键zrtt_industry。 3.通过xargs将剩余密钥传递给redis-cli-del。

    例如:

    redis-cli-h zapi.data.com关键字“*”|grep-v'^zrtt_industry$'|xargs-n 1 redis-cli-h zapi.data.com DEL

        2
  •  0
  •   A l w a y s S u n n y    11 月前

    你可以做这样的事-

    EVAL "local keys = redis.call('keys', '*'); for i=1,#keys do if keys[i] ~= 'zrtt_industry' then redis.call('del', keys[i]) end end" 0
    

    Redis EVAL 运行Lua脚本:

    • 获取所有密钥
    • 迭代它们
    • 删除与“zrtt_industry”不匹配的每个密钥

    我已经测试过了,它对我有效 redis-cli

    enter image description here

    所以在你的情况下,你需要运行这个,

    redis-cli -h zapi.data.com EVAL "local keys = redis.call('keys', '*'); for i=1,#keys do if keys[i] ~= 'zrtt_industry' then redis.call('del', keys[i]) end end" 0