我们列出了包含各种特殊字符的数十万个Redis密钥,我们希望批量删除它们。对于这个问题,类似的问题有一些很好的答案:How to atomically delete keys matching a pattern using Redis
但是,我似乎无法找到以下案例的答案:
如果我们可以执行类似下面的操作,我会很乐意,但是它会处理带有Redis问题的所有特殊字符的键:
redis-cli SMEMBERS "myGiganticListOfKeys" | xargs --delim='\n' redis-cli DEL
不幸的是,这只是出现以下错误:
"C:/Program Files (x86)/Git/bin/xargs.exe": redis-cli: Bad file number
我认为如果我们在按键中没有特殊字符,这将会起作用。
非常感谢。
答案 0 :(得分:1)
您应该尝试使用更强大的客户端创建应用程序。 请参阅client list。 redis-cli是一个非常基本的命令行实用程序,仅用于破解/使用Redis。
我同意你的意见,最好重新设计你的钥匙/超值商店。
如果需要使多个密钥无效,请考虑使用标记机制:在添加密钥时使用散列按标记对密钥进行分组,然后使整个标记无效,从而删除散列中的所有密钥。
答案 1 :(得分:1)
以下是我如何解决它,这适用于数以万计的记录而不会给redis带来压力。
WARNING: PLEASE DO NOT TRY THIS AT HOME UNATTENDED AND MAKE SURE TO WEAR
ALL SAFETY EQUIPMENT NECESSARY FOR THE TASK.
第1步。将所需的所有密钥从redis转储到文件中,让我们调用此文件YES_WE_CAN.sh
redis-cli KEYS "StartsWith*" > YES_WE_CAN.sh
第2步:使用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
在脚本删除您请求的数百万个密钥时享用您的咖啡。