Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis从海量key中查询出某一固定前缀key

Redis如何从海量key中查询出某一固定前缀的key

作者:一缕纯氧

当Redis存储一亿key时,使用keys指令可能因返回全部key导致服务器卡顿,而scan指令通过游标分批获取,避免阻塞,适合生产环境,需注意重复结果可用hashSet去重,count参数可调整返回数量但非强制

常问问题

假如redis里有一亿个key,其中有10万个key是以某个固定的已知的前缀开头的,如何将他们全部找出来?

留意细节

摸清数据规模(数据量是多大?根据实际场景去作答),问清楚边界。

给出答案

1.用keys指令找出指定模式的key列表

2.用scan指令

SCAN cursor [MATCH pattern] [COUNT count]

1.scan指令是一个基于游标的迭代器

命令每次被调用都需要上一次调用返回的游标作为该次调用的游标参数(cursor),以此来延续之前的迭代过程。

2.当scan指令的游标参数cursor设置为0时

3.scan增量式迭代

4.对于增量式迭代命令

127.0.0.1:6379> scan 0 match k1* count 10
1) "11009983"
2) 1) "k15183267"
   2) "k18983203"
   3) "k14348902"
127.0.0.1:6379> scan 11009983 match k1* count 10
1)"23902345"
2) 1) "k17203743"
   2) "k18324732"
   3) "k11028343"
   4) "k11143424"
   5) "k12304823"
127.0.0.1:6379> scan 23902345 match k1* count 10
1) "24080390"
2) 1) "k12438294"
   2) "k18392744"
   3) "k14320420"
   4) "k11043243"

使用SCAN指令获取到的结果可能会重复,后端可以用hashSet收集结果,以达到去重的效果。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文