如何按存储键的顺序顺序扫描Redis键空间?

如何按存储键的顺序顺序扫描Redis键空间?,redis,Redis,在Redis中,使用SCAN/COUNT命令组合,我们可以从密钥空间中以随机顺序检索密钥。例如,如果密钥空间有100个密钥,并且这些密钥存储为001002003…100。如果我们使用命令“scan 0 count 50”,结果将包含按随机顺序列出的50个键(例如002、003、050…) 我们是否可以扫描密钥空间并按照存储在Redis中的顺序提取密钥?预期的键扫描结果应该是像001、002、003、…050 此外,是否有方法指向Redis密钥空间中的特定密钥并扫描下一个“n”密钥?例如,转到键-

在Redis中,使用SCAN/COUNT命令组合,我们可以从密钥空间中以随机顺序检索密钥。例如,如果密钥空间有100个密钥,并且这些密钥存储为001002003…100。如果我们使用命令“scan 0 count 50”,结果将包含按随机顺序列出的50个键(例如002、003、050…)

我们是否可以扫描密钥空间并按照存储在Redis中的顺序提取密钥?预期的键扫描结果应该是像001、002、003、…050

此外,是否有方法指向Redis密钥空间中的特定密钥并扫描下一个“n”密钥?例如,转到键-010并从11扫描到30


请给出建议。

这两个问题的简短答案是:

可以手动执行键空间迭代,方法是对排序集中的键进行索引,然后分别使用ZRANGE和ZRANGEBYLEX按顺序扫描键空间和从前缀开始扫描

假设您创建了键foo、bar和baz,您还需要对它们进行索引。我们在事务中执行此操作以确保索引一致

> MULTI
> SET foo 1
> ZADD __index__ 0 foo
> EXEC
>
> MULTI
> SET bar 2
> ZADD __index__ 0 bar
> EXEC
>
> MULTI
> SET baz whatever
> ZADD __index__ 0 baz
> EXEC
... and so on 
请注意,我们已将所有键添加到分数为0的排序集中。这意味着我们可以利用词汇范围

为了现在迭代索引,我们只需执行ZRANGE或ZREVRANGE。因为所有元素的分数都是0,所以顺序是按字典顺序排列的。因此,对前10个元素进行分页:

ZRANGE __index__ 0 10
要从特定条目“foo”迭代10个键:


这需要代码中的活动内容,但并不难做到。但无论如何,答案很长——这是目前实现这一目标的唯一途径。有一些模块可以让您稍微实现自动化,但还不是完全自动化。

谢谢您的解释!!我的问题语句的好解决方案密钥存储在一个哈希表中,因此要求“按redis中存储的顺序”获取密钥会给您一个任意顺序。此外,由于扫描语义和哈希表bucketing,当您数50时,可能会得到大于或小于50的结果。只是澄清你问题中一些明显的误解。公认的答案是好的。
ZRANGEBYLEX __index__ [foo + LIMIT 0 10