redis 数据结构介绍五 - 第五部分 对象
前面说了这么些数据结构,其实大家对于 redis 最初的印象应该就是个 key-value 的缓存,类似于 memcache,redis 其实也是个 key-value,key 还是一样的字符串,或者说就是用 redis 自己的动态字符串实现,但是 value 其实就是前面说的那些数据结构,差不多快说完了,还有个 quicklist 后面还有一篇,这里先介绍下 redis 对于这些不同类型的 value 是怎么实现的,首先看下 redisObject 的源码头文件
主体结构就是这个 redisObject,
type: 字段表示对象的类型,它对应的就是 redis 的对外暴露的,或者说用户可以使用的五种类型,OBJSTRING, OBJLIST, OBJSET, OBJZSET, OBJ_HASH
encoding: 字段表示这个对象在 redis 内部的编码方式,由OBJENCODING开头的 11 种
lru: 做LRU替换算法用,占24个bit
refcount: 引用计数。它允许robj对象在某些情况下被共享。
ptr: 指向底层实现数据结构的指针
当 type 是 OBJSTRING 时,表示类型是个 string,它的编码方式 encoding 可能有 OBJENCODINGRAW,OBJENCODINGINT,OBJENCODING_EMBSTR 三种
当 type 是 OBJLIST 时,表示类型是 list,它的编码方式 encoding 是 OBJENCODINGQUICKLIST,对于早一些的版本,2.2这种可能还会使用 OBJENCODINGZIPLIST,OBJENCODING_LINKEDLIST
当 type 是 OBJSET 时,是个集合,但是得看具体元素的类型,有可能使用整数集合,OBJENCODINGINTSET, 如果元素不全是整型或者数量超过一定限制,那么编码就是 OBJENCODING_HT hash table 了
当 type 是 OBJZSET 时,是个有序集合,它底层有可能使用的是 OBJENCODINGZIPLIST 或者 OBJENCODING_SKIPLIST
当 type 是 OBJHASH 时,一开始也是 OBJENCODINGZIPLIST,然后当数据量大于 hashmax_ziplist_entries 时会转成 OBJENCODINGHT
版权声明: 本文为 InfoQ 作者【Nick】的原创文章。
原文链接:【http://xie.infoq.cn/article/ee40b3a13fac8d0e9157f1c0e】。文章转载请联系作者。
评论