9

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

.
.
.

4

2 回答 2

15

命令

使用以下命令开始完整的哈希扫描:

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

于 2013-11-12T10:44:45.827 回答
9

正如你所提到的。你需要得到哈希键的输出

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 

使用密钥匹配(不推荐,因为它会阻塞 redis 服务器)

keys myhash*

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

于 2013-11-20T00:49:05.710 回答