解释
redis中,所有的数据类型最终都转换成了redisObject,该结构体的定义,在文件server.h中。
参数说明
参数名 | 说明 |
---|---|
unsigned type:4 | 对象对应的数据类型 |
unsigned encoding:4 | 对象的编码方式 |
unsigned lru:LRU_BITS | LRU算法清空对象,LRU_BITS=24 |
int refcount | 对象的引用计数 |
void *ptr | 指向实际的数据结构的指针 |
数据类型
字符串(String)
列表(List)
哈希(hash)
集合(Set)
有序集合(Sorted Set)
Bitmap (位图)
HyperLogLog(基数统计)
Geospatial (地理位置)
数据结构
SDS
双向链表
哈希表
整型数组
压缩列表
跳跃表
数据类型和数据结构的映射关系
编码方式
参考源码文件object.c的*strEncoding 方法。
char *strEncoding(int encoding) {switch(encoding) {case OBJ_ENCODING_RAW: return "raw";case OBJ_ENCODING_INT: return "int";case OBJ_ENCODING_HT: return "hashtable";case OBJ_ENCODING_QUICKLIST: return "quicklist";case OBJ_ENCODING_ZIPLIST: return "ziplist";case OBJ_ENCODING_INTSET: return "intset";case OBJ_ENCODING_SKIPLIST: return "skiplist";case OBJ_ENCODING_EMBSTR: return "embstr";default: return "unknown";}
}
数据结构和编码方式的映射关系
数据类型 | 描述 |
---|---|
OBJ_ENCODING_RAW | 动态字符串SDS |
OBJ_ENCODING_INT | 整数 |
OBJ_ENCODING_HT | 哈希表 |
OBJ_ENCODING_QUICKLIST | 双向链表 |
OBJ_ENCODING_ZIPLIST | 压缩列表 |
OBJ_ENCODING_INTSET | 整形数组 |
OBJ_ENCODING_SKIPLIST | 跳跃表 |
OBJ_ENCODING_EMBSTR | EMBSTR编码的动态字符串 |
LRU
记录最后一次访问时间。
refcount
对象的引用计数,类似JVM中的垃圾回收算法-引用计数法,refcount=0表示没有被引用了,可以进行内存回收。
*prt
指向实际的数据结构的指针。