redis scan扫描

1.查询redis 数据库有多少key可以使用 keys 或者scan
 
keys pattern  时间复杂度为O(n),会遍历所有的key, 造成redis服务阻塞, 线上不可接受
 
2.scan curson match pattern count num
一次遍历一个或多个桶,时间较少,不会造成阻塞
缺点:可能遍历结果有重复数据 
 
 
正常情况下,使用scan没问题,如果正在rehash,则会造成重读
比如现在有四个桶,读了0,1,发生rehash时, 0会到4上,1是到5,造成重读,
redis使用高位递增遍历,如下, 当02,遍历完以后0426肯定是遍历完的
但缩容有可能发成key重复
 
 
00  0
10  2
01  1
11  3
 
000 0
100 4
010 2
110 6
001 1
101 7
011 3
111 8
posted @ 2019-03-07 17:45  教主陈  阅读(2060)  评论(0编辑  收藏  举报