【问题标题】:How to use HSCAN command in Redis?如何在 Redis 中使用 HSCAN 命令?
【发布时间】:2013-11-23 12:01:36
【问题描述】:

我想在我的作业中使用 Redis 的 HSCAN 命令,但我不知道它是如何工作的。这个命令的 Redis 官方页面 (http://redis.io/commands/hscan) 给了我空白页。

我正在获取连续的输入数据并立即将它们保存在 Redis 中的多个哈希中,我想在稍后的时间点遍历所有这些数据。

我正在使用以下命令来保存我的数据

HMSET myhash ordertype "neworder" order_ts "1234" act_type "order_ack" ack_ts "1240" HMSET myhash2 ordertype "neworder" order_ts "2234" act_type "order_ack" ack_ts "2240"

谁能给我一些如何使用 HSCAN 的例子?

就我而言,我想获得以下输出
1) 哈希
2) myhash2
3) myhash3
.
.
.
.

【问题讨论】:

    标签: redis hiredis


    【解决方案1】:

    命令

    使用以下命令开始完整的哈希扫描:

    HSCAN myhash 0

    使用与以下模式匹配的字段开始哈希扫描:

    HSCAN myhash 0 MATCH order_*

    使用与模式匹配的字段开始哈希扫描,并强制扫描命令执行更多扫描:

    HSCAN myhash 0 MATCH order_* COUNT 1000

    注意

    不要忘记 MATCH 每次迭代都可以返回很少甚至没有元素,如 documentation 中所述:

    需要注意的是 MATCH 过滤器是在 在返回数据之前从集合中检索元素 给客户。这意味着如果模式匹配很少 集合中的元素,SCAN 可能不会返回集合中的任何元素 大多数迭代。

    这就是为什么您可以使用COUNT 来强制每次迭代进行更多扫描。

    [更新]正如Didier Spezia 指定的那样,您需要 Redis 2.8+ 才能使用 *SCAN 命令。

    【讨论】:

    • 请注意,您需要 Redis 2.8 才能获得扫描功能。稳定的 Redis 仍然是 2.6。
    • 我觉得他很困惑。他想要的是哈希键作为输出,而 HSCAN 将扫描扫描的值。
    • 是否可以在复杂的数据类型/对象中使用匹配?
    【解决方案2】:

    正如你所说。你需要得到哈希键的输出

    myhash
    myhash2
    myhash3
    

    HSCAN 不用于此目的。 HSCAN 是扫描特定 HASH 的字段。所以你可以扫描 myhash 或 myhash2 的字段。但是,如果您想根据模式找到键,您有两种选择。

    使用 HASH 键创建一个 SET

    SADD hashkeys "myhash" "myhash1" "myhash2"
    
    SMEMBERS hashkeys
        1) "myhash"
        2) "myhash2"
        3) "myhash1"
    
    If you are using 2.8 I would recommend you use sscan instead of smembers
    
    sscan hashkeys 0 match my*
    

    仅使用扫描命令

    scan 0 MATCH myhash* count 1000 
    

    使用密钥匹配(不推荐,因为它会阻塞 redis 服务器)

    keys myhash*
    

    这么长的故事剪切排序来获取您可以使用 SMEMBERS、SSCAN 或 KEYS 的密钥。如果您使用的是 redis 2.8,当然最好是 SSCAN

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2022-01-08
      • 2021-10-20
      相关资源
      最近更新 更多