如何在Redis中使用HSCAN命令?

11

我想在我的作业中使用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)myhash
2)myhash2
3)myhash3
.
.
.
.

2个回答

17

命令

使用以下命令启动完整的哈希扫描:

HSCAN myhash 0

使用以下命令启动匹配模式字段的哈希扫描:

HSCAN myhash 0 MATCH order_*

使用以下命令强制执行更多的扫描,并启动匹配模式字段的哈希扫描:

HSCAN myhash 0 MATCH order_* COUNT 1000

注意

不要忘记,MATCH 可能会对每个迭代返回很少或没有元素,如文档中所述:

  

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

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

[更新]Didier Spezia 所指出的,您需要Redis 2.8+才能使用 *SCAN 命令。


2
请注意,您需要Redis 2.8才能获得扫描功能。稳定的Redis版本仍为2.6。 - Didier Spezia
我认为他很困惑。他想要哈希键作为输出,而HSCAN将扫描扫描的值。 - Jack Daniel's
能否在复杂数据类型/对象中使用match? - Fernando

11

正如您所提到的,您需要获取哈希键的输出

myhash
myhash2
myhash3
HSCAN不适用于这个目的。HSCAN用于扫描特定哈希表的字段,因此您可以扫描myhash或myhash2的字段。但是,如果您想基于模式查找键,则有两个选项。
创建一个带有哈希键的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命令

scan 0 MATCH myhash* count 1000 

使用键匹配(不建议,因为它会阻塞Redis服务器)

keys myhash*

简而言之,要获取键,您可以使用SMEMBERS、SSCAN或KEYS命令。当然,如果您使用的是Redis 2.8,则最好使用SSCAN。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接