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