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