Redis - 删除除一个键之外的所有内容

问题描述 投票:0回答:2

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

redis-cli -h zapi.data.com flushdb

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

非常感谢!

redis purge
2个回答
0
投票

你可以做这样的事情 -

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

0
投票

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

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

例如:

redis-cli -h zapi.data.com KEYS "*" | grep -v '^zrtt_industry$' | grep -v '^zrtt_industry$' | xargs -n 1 redis-cli -h zapi.data.com DEL

© www.soinside.com 2019 - 2024. All rights reserved.