我们目前正在 shell 中使用此命令来清除我们的 Redis 数据库:
redis-cli -h zapi.data.com flushdb
但是,现在我被告知必须删除除“zrtt_industry”键之外的所有键。 我怎样才能做一个正则表达式来删除除与我的模式匹配的键之外的所有键,该模式是“zrtt_industry”。
非常感谢!
你可以做这样的事情 -
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 脚本:
我已经测试过它,它对我有用
redis-cli
所以在你的情况下你需要运行这个,
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
不幸的是,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