【问题标题】:Redis delete hash keys by pattern in hash valueRedis 按哈希值中的模式删除哈希键
【发布时间】:2016-02-06 09:06:14
【问题描述】:

我遇到了一个小问题。我想从值与字符串模式匹配的 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 

以自动方式。

【问题讨论】:

    标签: shell command-line redis


    【解决方案1】:

    不幸的是,我认为您可以做到这一点的唯一方法是使用HGETALL,或者更好的HSCAN

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

    理论上,您可以将其通过管道传输到与您的正则表达式匹配的偶数行中,并发出一个或多个 HDEL 命令,奇数行在匹配之前。这对我的 bash 技能来说有点多。也许 lua 脚本会更简单。

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

    【讨论】:

    • 是的,谢谢,但我的 CLI 技能也不是那么好,我真的在寻找这样的解决方案。关于 HSCAN,是的,这是个好主意,因为有问题的哈希有几百万个条目。
    • 对于这么复杂的事情,用您最熟悉的任何语言编写一个小脚本可能是最简单的。
    猜你喜欢
    • 2013-10-09
    • 2010-10-20
    • 2013-03-30
    • 2023-04-09
    • 1970-01-01
    • 2021-05-25
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多