如何在Redis中使用HSCAN命令?

use*_*755 7 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
.
.
.
.

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

  • 请注意,您需要Redis 2.8才能获得扫描功能.稳定的Redis仍然是2.6. (2认同)

Jac*_*l's 8

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

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