redis对象编码源码阅读——集合编码与转码
1. 集合对象的编码类型
类型 | 编码 | 对象 |
---|---|---|
REDIS_SET | REDIS_ENCODING_INTSET | 使用整数集合实现的集合对象 |
REDIS_SET | REDIS_ENCODING_HT | 使用字典实现的集合对象 |
2. 集合的转码过程
/* Convert the set to specified encoding. The resulting dict (when converting
* to a hash table) is presized to hold the number of elements in the original
* set. */
void setTypeConvert(robj *setobj, int enc) {
// set 的迭代器
setTypeIterator *si;
// 转码器只支持 INTSET 转 HT
redisAssertWithInfo(NULL,setobj,setobj->type == REDIS_SET &&
setobj->encoding == REDIS_ENCODING_INTSET);
if (enc == REDIS_ENCODING_HT) <