如何在Redis

时间:2015-10-01 14:53:36

标签: redis

我们列出了包含各种特殊字符的数十万个Redis密钥,我们希望批量删除它们。对于这个问题,类似的问题有一些很好的答案:How to atomically delete keys matching a pattern using Redis

但是,我似乎无法找到以下案例的答案:

  1. 我们有大量的密钥(数十万)
  2. 键具有特殊字符的所有方式,如双引号("),反斜杠(),各种奇怪的Unicode字符等。
  3. 我们正在使用windows redis-cli客户端
  4. 奖励:理想情况下,我们可以将此命令作为MULTI / EXEC事务的一部分发出,因此我们也可以原子地删除SET以及键。
  5. 如果我们可以执行类似下面的操作,我会很乐意,但是它会处理带有Redis问题的所有特殊字符的键:

    redis-cli SMEMBERS "myGiganticListOfKeys" | xargs --delim='\n' redis-cli DEL

    不幸的是,这只是出现以下错误:

    "C:/Program Files (x86)/Git/bin/xargs.exe": redis-cli: Bad file number

    我认为如果我们在按键中没有特殊字符,这将会起作用。

    非常感谢。

2 个答案:

答案 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

在脚本删除您请求的数百万个密钥时享用您的咖啡。