【发布时间】:2015-12-29 16:31:53
【问题描述】:
我们有数十万个包含各种特殊字符的 Redis 键的列表,我们希望批量删除它们。对于这个问题的类似问题有一些很好的答案:How to atomically delete keys matching a pattern using Redis
但是,对于以下情况,我似乎找不到答案:
- 我们有大量的密钥(数十万个)
- 键有各种特殊字符,如双引号 (")、反斜杠 ()、各种奇怪的 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
我认为如果我们在键中没有特殊字符,否则这将起作用。
非常感谢。
【问题讨论】:
-
我对 Windows fork 并不熟悉,但如果它的 redis-cli 支持 --pipe 开关,您可以准备一个包含所有
DEL <funnykeyname>命令的文本文件并直接通过管道输入。 -
@RyanVincent 我们实际上有我们想要删除的键的确切列表——它们在一个集合中。问题是使用该集合(例如 SMEMBERS “myKeyName”)并在有大量数字时将其全部删除,并且键恰好具有特殊字符。
-
感谢@ItamarHaber 的想法,但即使它确实有效——我猜它不会因为我怀疑它与仅从 SMEMBERS mykeyName 提供的密钥列表有什么不同——它因为我们正在尝试编写一个可重用的 PowerShell 脚本来删除指定集中的所有键,所以这并不是非常实用。在此过程中创建一个临时文件然后清理它并不理想。不过还是谢谢。
-
@RyanVincent 没问题,我将上面的示例更改为使用 SMEMBERS 而不是通配符示例,以阐明我们要解决的实际问题。
-
所有导致 Redis 问题的特殊字符是什么意思?
标签: redis