redis如何限制KEYS命令的返回数量?

问题描述 投票:0回答:2

我在redis中使用“KEYS p_*”命令获取值。

但是使用“KEYS p_*”,如果redis有数百万个键,我会得到太多 价值观和糟糕的表现。

那么我可以使用“KEYS p_*”命令获取 100 个值吗?

redis
2个回答
69
投票

建议在生产中使用 SCAN,因此您可以使用以下内容:

SCAN 0 COUNT 100 MATCH p_*

并继续获取下一页
有关更多详细信息,请参阅 SCAN 命令:
http://redis.io/commands/scan


0
投票

我必须在某个地方留下这个评论[因为我没有足够的声誉来发表评论,pff]。

TL;博士 因此,Liviu 建议使用

SCAN 0 COUNT 100 MATCH p_*
来检索与模式匹配的前 n 个元素。但是通过这个命令,你可以获得一个甚至是空的数组(这并不意味着 Redis 没有与模式匹配的键)!

参考https://redis.io/commands/scan/#检查MATCH选项

redis 127.0.0.1:6379> scan 0 MATCH *11*
1) "288"
2) 1) "key:911"
redis 127.0.0.1:6379> scan 288 MATCH *11*
1) "224"
2) (empty list or set)

在上面的示例中,在第二个请求中,用户获得

(empty list or set)
和一个新指针 (224)。根据描述,即使在第一次请求时,用户也可以获取
(empty list or set)
!因此,只有 1 个带有以下命令的请求:
SCAN 0 COUNT 100 MATCH p_*
,您可能无法完成任务:“获取前 n 个键”。

要完成该任务,您应该使用指针进行迭代(逐个请求),直到获取所需数量的键,或者直到指针为 0!

另外,对Redis中

SCAN
命令的误解如下(我不想发表同样的评论,因为我发现这个声誉系统是不友好且不民主的):

PS。天哪,这么多人喜欢这个答案,对 redis SCAN 有很大的误解

© www.soinside.com 2019 - 2024. All rights reserved.