您的位置:首页 > 理论基础 > 数据结构算法

Redis内部数据结构总结(1)sds和robj

2016-11-04 17:04 260 查看
SDS

sds是redis中被广泛使用的字符串结构,不过redis的底层是先一层robj,再细化为sds或者long

①sds的全称是simple dynamic string,它可动态扩展内存。sds表示的字符串内容可以修改和追加。

②sds是二进制安全的,sds能存储任意二进制数据,而不仅仅是打印字符串。

③与传统的c语言字符串兼容。

sds的类型定义是一个字符数组和一个header结构 

typedef char * sds;字符数组长度等于最大容量+1,这样再字符串长度到达最大容量时仍然有一个字节存放NULL。

header结构包含字符串的长度,最大容量和类型,不同的长度类型不同。



ROBJ

对于外部而言,redis每个database维护了K到V的映射关系,其中key为固定的string,而value类型可能是string,list,hash等。

redis的这个映射关系是用一个dict来维护的,为了再同一个dict能够存储不同类型的value,redis使用了一个通用结构robj

如果value是一个list,则其内部是quicklist,如果value是一个string,则其内部结构可能是个sds或者long。

robj的结构定义



其中的type表示对象的数据类型,可能的类型为



encoding表示编码,比如当type是OBJ_STRING的时候,编码可以用来区分是long还是sds。

refcount为引用计数

ptr表示数据指针,向真正的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: