我在redis中使用“KEYS p_*”命令获取值。
但是使用“KEYS p_*”,如果redis有数百万个键,我会得到太多 价值观和糟糕的表现。
那么我可以使用“KEYS p_*”命令获取 100 个值吗?
建议在生产中使用 SCAN,因此您可以使用以下内容:
SCAN 0 COUNT 100 MATCH p_*
并继续获取下一页
有关更多详细信息,请参阅 SCAN 命令:
http://redis.io/commands/scan
我必须在某个地方留下这个评论[因为我没有足够的声誉来发表评论,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 有很大的误解