Redis之从海量key里查询出某一个固定前缀的key
KEYS pattern :查找所有符合给定模式pattern的key
- keys命令一次性返回所有匹配的key
- 键的数量过大会使服务器卡顿
keys指令可以达到目标,但是需要注意数据的规模,当数据量特别大时,keys命令会花费较长时间,导致服务器卡顿
在生产环境中想要查询固定前缀的key,不能使用keys命令,可以使用scan命令
SCAN cursor [MATCH pattern] [COUNT count]
cursor : 游标
pattern : 匹配模式
count : 取出的元素个数 , 不准确 , 模糊匹配 , 只能取大概个数
scan命令作用:无阻塞的提取符合该匹配模式的元素列表,只可提取少量元素,且元素数量不确定,模糊匹配,可用于生产环境
- 基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程
- 以0作为游标开始一次新的迭代,直到命令返回游标0完成一次遍历
- 不保证每次执行都返回某个给定数量的元素,支持模糊查询
- 一次返回的数量不可控,只能大概率符合count参数
127.0.0.1:6379> scan 0 match k1* count 10 #从0游标开始 查找以k1开头的key 取10个
1) "11534336" #返回的游标
2) 1)"k182621518" #查找出的符合结果的key
2)"k122251511"
3)"k222489405"
127.0.0.1:6379> scan 11534336 match k1* count 10 #从返回的游标开始 进行下一次查询
1) "25150561" #返回的游标 需要注意 返回的游标是随机的 并不一定比第一次小
2) 1)"k104150025" #查找出的符合结果的key
2)"k190648005"
3)"k160544807"
4)"k192042260"
5)"k130641813"
Redis大量的key同时过期
大量key同时过期,由于清除大量key很耗时,可能会出现短暂的卡顿现象
解决方案:在设置key的过期时间时,给每个key加上随机值