redis - Redis中如何批量删除几十万个带有特殊字符的key

标签 redis

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

但是,对于以下情况,我似乎找不到答案:

  1. 我们有大量的 key (数十万个)
  2. 键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 Unicode 字符等。
  3. 我们正在使用 windows redis-cli 客户端
  4. 好处:理想情况下,我们能够将此命令作为 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/

相关文章:

tcp - 如何读取 TCP 连接上的所有字节?

尝试使用 throttle 时,Laravel 作业在 Redis 上失败

go - 使用不带 WATCH 的 go-redis 包将流水线和事务都实现到 redis 集群

node.js - 如何使用node.js在redis数据库中保存多个json对象

caching - 使用 nginx 直接从 redis 缓存中提供内容

php - Redis:KEYS * 的结果是如何排序的?

random - Redis Lua 脚本 math.random

node.js - 在我的网站上放慢流氓网络 srappers 并仍然使用 Varnish

ruby-on-rails - Redis 不断调用 localhost :6379 even though deployed to Heroku

go - 使用redis作为缓存,TTL和Mysql中每个表的字节大小限制