关于shell:Redis按哈希值中的模式删除哈希键

Redis delete hash keys by pattern in hash value

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

具体示例:

1
2
3
4
5
6
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不变。

我想在命令行上执行此操作,因此这样的操作会很棒:

1
redis-cli -n 0 KEYS someFoo* | xargs redis-cli -n 0 DEL

以上工作当然不是为了散列。 所以最后我需要打电话

1
2
redis-cli -n 0 hdel myhash field1
redis-cli -n 0 hdel myhash field3

以自动化的方式。


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

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

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

如果您的哈希很大,则确实应该使用HSCANHGETALL将在获取数据时阻塞。