redis基础数据结构(七)整数集合

redis的整数集合实现较为简单,设计是元素顺序排列从而提供一个O(logN)的访问时间,代码在intset.h和intset.c中,intset.c中提供的api:

_intsetValueEncoding:根据v的值判断编码方式,包括负数的情况

_intsetGetEncoded:根据提供的编码方式,返回pos位置的值,pos是数组下标

_intsetGet:返回pos位置的值,是_intsetGetEncoded的封装

_intsetSet:设置pos位置的值,pos是数组下标

intsetNew:创建一个新的intset,默认编码方式是INT16,初始length是0

intsetResize:根据提供的编码方式,重建一个intset

intsetSearch:查找一个值,若找到这个值所在的位置,若没找到,返回要插入到这个值的位置,可能是头、尾或者中间,这是一个二分查找

intsetUpgradeAndAdd:升级编码方式并插入一个新值,由于是升级,因此确定要插入的值在头或者尾,这个需要调用者保证

intsetMoveTail:将from位置到结尾的所有元素移动到to位置,from和to是数组下标,调用者保证不会发生踩内存

intsetAdd:插入一个value到intset中,内部判断是否需要升级编码方式

intsetRemove:删除一个元素

intsetFind:判断一个元素是否在intset中,是一个O(logN)时间操作

intsetRandom:返回一个随机位置的元素,随机数用的是库函数rand

intsetGet:返回pos位置的值,是_intsetGet的包装

intsetLen:返回intset的元素个数

intsetBlobLen:返回一个intset的内存字节数,包括头


猜你喜欢

转载自blog.csdn.net/kdb_viewer/article/details/80778286