redis3.0.7源码阅读(九)redis对象
2017-01-08 20:47
423 查看
版本:3.0.71.源文件redis.hobject.ct_hash.ct_list.ct_set.ct_string.ct_zset.c2.数据结构redis使用对象来表示数据库中的键和值(k/v),每创建一个键值对时,至少会创建两个对象,分别用于k/v,redis的键(k)总是字符串,值(v)则可以是字符串对象/列表对象/集合对象/有序集合对象/哈希对象,每种类型的对象又至少使用了两种不同的编码。举个例子,127.0.0.1:6379> hset a b 1(integer) 1127.0.0.1:6379> type ahash127.0.0.1:6379> object encoding a"ziplist"
/* * 对象类型 * 通过TYPE命令可查看值的类型 */ /* Object types */ // 字符串对象 #define REDIS_STRING 0 // 列表对象 #define REDIS_LIST 1 // 集合对象 #define REDIS_SET 2 // 有序集合对象 #define REDIS_ZSET 3 // 哈希对象 #define REDIS_HASH 4 /* * 对象编码 * 通过OBJECT ENCODING命令可查看值的编码类型 */ /* Objects encoding. Some kind of objects like Strings and Hashes can be * internally represented in multiple ways. The 'encoding' field of the object * is set to one of this fields for this object. */ // 动态字符串 #define REDIS_ENCODING_RAW 0 /* Raw representation */ // 整数 #define REDIS_ENCODING_INT 1 /* Encoded as integer */ // 哈希表 #define REDIS_ENCODING_HT 2 /* Encoded as hash table */ // 压缩map #define REDIS_ENCODING_ZIPMAP 3 /* Encoded as zipmap */ // 双端链表 #define REDIS_ENCODING_LINKEDLIST 4 /* Encoded as regular linked list */ // 压缩表 #define REDIS_ENCODING_ZIPLIST 5 /* Encoded as ziplist */ // 整数集合 #define REDIS_ENCODING_INTSET 6 /* Encoded as intset */ // 跳跃表 #define REDIS_ENCODING_SKIPLIST 7 /* Encoded as skiplist */ // embstr编码的动态字符串 #define REDIS_ENCODING_EMBSTR 8 /* Embedded sds string encoding */ /* * Redis 对象 */ typedef struct redisObject { // 对象类型 unsigned type:4; // 对象编码 unsigned encoding:4; // 对象最后一次被访问的时间 unsigned lru:REDIS_LRU_BITS; /* lru time (relative to server.lruclock) */ // 引用计数 int refcount; // 指向实际值的指针 void *ptr; } robj;3.内存分布4.对象编码4.1 字符串对象的编码:int/raw/embstr4.2 列表对象的编码:ziplist/linkedlist4.3 哈希对象的编码ziplist/hashtables4.4 集合对象的编码inset/hashtables4.5 有序集合对象的编码ziplist/skiplist注1:redis在执行命令时,会先进行对象类型检查,对象类型检查通过后,再进行对象编码检查,根据编码类型调用处理函数。注2:redis会对整数值的字符串对象进行共享,OBJECT ENCODING查看编码类型注3:OBJECT IDLETIME查看键的空闲时间原文出自:http://blog.csdn.net/daiyudong2020/article/details/54236690End;
相关文章推荐
- redis3.0.7源码阅读(四)redis双端链表
- redis3.0.7源码阅读(十)redis数据库
- redis3.0.7源码阅读(五)redis字典
- redis3.0.7源码阅读(七)redis跳跃表
- 【redis源码阅读】redis对象
- redis3.0.7源码阅读(十二)redis事件处理
- redis3.0.7源码阅读(二)源码文件归类
- redis3.0.7源码阅读(八)redis压缩表
- Redis源码阅读笔记(2)-- 对象robj
- Redis源码阅读笔记--六大数据结构和五大对象
- redis3.0.7源码阅读(十三)main函数
- redis3.0.7源码阅读(十一)redis数据库rdb
- redis3.0.7源码阅读(六)redis整数集合
- redis3.0.7源码阅读(三)redis动态字符串
- redis3.0.7源码阅读(一)源码文件
- 【redis源码阅读】redis对象
- openfire源码解读之将cache和session对象移入redis以提升性能
- 2016 第2讲 Scala面向对象彻底精通及Spark源码阅读
- Spring源码阅读4.2-Aspecjt AOP之代理对象的创建
- Redis源码解析:08对象