Redis通过散列值中的模式删除散列键
问题描述:
我陷入了一个小问题。我想从redis数据库中删除所有匹配字符串模式的哈希键/值对。我发现了一些针对命令行的解决方案,用于通过键值删除哈希值的问题,但没有针对通过值模式删除的相关问题。Redis通过散列值中的模式删除散列键
具体的例子:
redis> HSET myhash field1 "Wild"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HSET myhash field2 "Window"
(integer) 1
现在我想删除从myhash所有键/值对匹配,即FIELD1 /野,场3 /窗口,但离开场2 /世界不变的 “Wi *。”
我想这样做在命令行上,所以这样的事情将是巨大的:
redis-cli -n 0 KEYS someFoo* | xargs redis-cli -n 0 DEL
当然,上述工作不是哈希值。所以最后我需要以自动方式致电
redis-cli -n 0 hdel myhash field1
redis-cli -n 0 hdel myhash field3
。
答
不幸的是,我认为唯一可以做到这一点的方法是使用HGETALL
,甚至更好HSCAN
。
redis> HGETALL myhash
1) "field1"
2) "Wild"
3) "field2"
4) "Window"
您在理论上导管能够即到的东西,即使你的正则表达式和一个或多个问题HDEL与前面匹配的奇数行命令行匹配。这对我的bash技能有点帮助。也许一个lua脚本会更容易。
如果你的散列值非常大,你应该使用HSCAN
。 HGETALL
会在获取数据时阻塞。
是的,谢谢,但我的CLI技能也不是很好,我真的在寻找这样的解决方案。关于HSCAN,是的,这是一个好主意,因为有问题的散列有几百万个条目。 – luksch
对于这样复杂的事情,使用任何你最喜欢的语言编写一个小脚本可能是最容易的。 – captncraig