字典中的hash表遍历的方式有以下几种:keys、hkeys、scan、hscan、zscan。
全遍历:
keys和hkeys返回的是hash表中的所有的key,如果当前的hash表很大的话,会比较耗时,这样的话就会阻塞其他操作,因此运行环境中返回keys和hkeys这两种方式是不推荐的。
分步遍历
使用scan是分步遍历的,是分步进行返回的,这样就不会阻塞其他的操作。
scan的用法
scan 0 match * count 1 – 第一次scan, 输入的游标是0,然后根据返回的下一个游标数字继续scan查询
scan和hscan的实现原理
巧妙地利用了 扩容和缩容 正好整数倍的关系, 从而避免数据的重复遍历
无论是扩容,缩容还是进行rehash都能够全部遍历到数据。
但是有一个例外就是进行连续两次缩容的时候可能会产生冗余的数据。
unsigned long dictScan(dict *d,
unsigned