Redis按散列值

时间:2015-11-05 13:41:49

标签: shell command-line redis

我遇到了一个小问题。我想从redis数据库中删除所有哈希键/值对,其中值与字符串模式匹配。我找到了一些针对按键值删除哈希问题的命令行解决方案,但没有找到按值模式删除的相关问题。

具体例子:

redis> HSET myhash field1 "Wild"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HSET myhash field2 "Window"
(integer) 1

现在我要删除myhash中匹配" Wi。*"的所有键/值对,即field1 / Wild,field3 / Window,但保持field2 / World不变。

我想在命令行上这样做,所以这样的事情会很棒:

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 

以自动方式。

1 个答案:

答案 0 :(得分:2)

不幸的是,我认为实现这一目标的唯一方法是使用HGETALL,甚至更好HSCAN

redis> HGETALL myhash
1) "field1"
2) "Wild"
3) "field2"
4) "Window"

理论上,您可以将其转换为与正则表达式匹配的行,并使用匹配前的奇数行发出一个或多个HDEL命令。这对我的bash技能来说有点多了。也许lua脚本会更容易。

如果您的哈希非常大,那么您真的应该使用HSCANHGETALL会在获取数据时阻止。