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