我们有一个包含数十万个 Redis 键的列表,其中包含各种特殊字符,我们希望批量删除它们。对于这个问题上的类似问题,有一些很好的答案:如何使用 Redis 自动删除与模式匹配的键 https://stackoverflow.com/questions/4006324/how-to-atomically-delete-keys-matching-a-pattern-using-redis/23399125#23399125
但是,我似乎无法找到以下情况的答案:
- 我们有大量的钥匙(数十万把)
- 这些键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 Unicode 字符等。
- 我们使用的是windows redis-cli客户端
- 额外好处:理想情况下,我们能够作为 MULTI/EXEC 事务的一部分发出此命令,这样我们也可以原子地删除 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.
Step 1.将您需要的所有密钥从 Redis 转储到一个文件,我们调用这个文件YES_WE_CAN.sh
redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh
Step 2:使用 vi 或 vim 打开文件 YES_WE_CAN.sh 并按:
字符,然后键入以下内容来替换特殊字符'
:
:%s/'/'"'"'/g
这将取代所有'
字符与'"'"'
转义序列。(相信我,这有效,继续!)
Step 3:附加到每个字符串之前redis-cli DEL
(不要忘记最后的空格):
:%s/^/redis-cli DEL /g
Step 4:在每行末尾附加'
特点:
:%s/$/'/g
Step 5:保存文件并退出使用:wq
Step 6:更改文件YES_WE_CAN.sh
到可执行模式:
chmod +x YES_WE_CAN.sh
Step 7:运行文件:
./YES_WE_CAN.sh
一边享受咖啡,一边让脚本删除您请求的数百万个密钥。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)