redis的整数集合实现较为简单,设计是元素顺序排列从而提供一个O(logN)的访问时间,代码在intset.h和intset.c中,intset.c中提供的api:
_intsetValueEncoding:判断一个整数应该采用何种编码方式
_intsetGetEncoded:获取集合中某个位置的元素的值,调用者提供这个元素的把编码方式
_intsetGet:返回集合中给定位置的元素的值
_intsetSet:设置集合中给定位置的元素的值,调用者提供编码方式
intsetNew:创建一个intset
intsetResize:重新设置一个intset的大小
intsetSearch:查找一个值,是二分查找
intsetUpgradeAndAdd:升级编码方式并插入一个新值,由于是升级,因此新插入的值一定在头或者尾
intsetMoveTail:将intset中从一个位置开始到结尾的所有元素移动到另一个位置
intsetAdd:插入一个value到intset中,内部可能会升级编码方式,整数集合不允许重复
intsetRemove:在intset中删除一个元素
intsetFind:判断一个元素是否在intset中,是一个O(logN)时间操作
intsetRandom:返回一个随机位置的元素,随机数用的是库函数rand
intsetGet:返回intset中给定位置的元素的值
intsetLen:返回intset的元素个数
intsetBlobLen:返回一个intset占用的内存,包括头和每个元素的内存