我们有一个包含各种特殊字符的数十万个 Redis 键的列表,我们想批量删除它们。关于这个问题的类似问题有一些很好的答案:How to atomically delete keys matching a pattern using Redis
但是,对于以下情况,我似乎找不到答案:
- 我们有大量的 key (数十万个)
- 键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 Unicode 字符等。
- 我们正在使用 windows redis-cli 客户端
- 好处:理想情况下,我们能够将此命令作为 MULTI/EXEC 事务的一部分发出,这样我们也可以连同 key 一起自动删除 SET。
如果我们可以像下面这样做,我会很高兴,但让它处理带有给 Redis 问题的所有特殊字符的键:
redis-cli SMEMBERS "myGiganticListOfKeys"| xargs --delim='\n' redis-cli DEL
不幸的是,这只会给出以下错误:
"C:/Program Files (x86)/Git/bin/xargs.exe": redis-cli: Bad file number
我认为,如果我们在键中没有特殊字符,这会奏效。
提前致谢。
最佳答案
这是我解决它的方法,这适用于无数的记录,而不会对 redis 造成压力。
WARNING: PLEASE DO NOT TRY THIS AT HOME UNATTENDED AND MAKE SURE TO WEAR
ALL SAFETY EQUIPMENT NECESSARY FOR THE TASK.
第 1 步。 将您需要的所有 key 从 redis 转储到一个文件中,我们将此文件称为 YES_WE_CAN.sh
redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh
第二步:用vi或vim打开文件YES_WE_CAN.sh,按:
字符,然后输入以下内容替换特殊字符'
:
:%s/'/'"'"'/g
这会将所有 '
字符替换为 '"'"'
转义序列。 (相信我,这有效,继续!)
第 3 步:在每个字符串前添加 redis-cli DEL
(不要忘记末尾的空格):
:%s/^/redis-cli DEL /g
第 4 步:在每行末尾附加 '
字符:
:%s/$/'/g
第 5 步: 保存文件并使用 :wq
第 6 步:将文件 YES_WE_CAN.sh
更改为可执行模式:
chmod +x YES_WE_CAN.sh
第 7 步:运行文件:
./YES_WE_CAN.sh
在脚本删除您请求的数百万个 key 的同时享用您的咖啡。
关于redis - Redis中如何批量删除几十万个带有特殊字符的key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32890648/