如何在Redis中使用HSCAN命令?

时间:2013-11-11 15:54:34

标签: redis hiredis

我想在我的作业中使用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 个答案:

答案 0 :(得分:12)

命令

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

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命令。

答案 1 :(得分:4)

正如你所提到的。你需要获得散列键的输出

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 

USE密钥匹配(不推荐,因为它会阻止redis服务器)

keys myhash*

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