我想在我的任务中使用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
.
.
.
.
FGR*_*eau 12
命令
使用以下命令启动完整哈希扫描
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命令.
正如您所提到的。您需要获取哈希键的输出
myhash
myhash2
myhash3
Run Code Online (Sandbox Code Playgroud)
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*
Run Code Online (Sandbox Code Playgroud)
仅使用扫描命令
scan 0 MATCH myhash* count 1000
Run Code Online (Sandbox Code Playgroud)
使用密钥匹配(不建议这样做,因为它将阻止Redis服务器)
keys myhash*
Run Code Online (Sandbox Code Playgroud)
长话短说,您可以使用SMEMBERS,SSCAN或KEYS来获取密钥。当然,如果您使用的是redis 2.8,最好的选择是SSCAN
| 归档时间: |
|
| 查看次数: |
27786 次 |
| 最近记录: |