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表示数据指针,向真正的数据
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表示数据指针,向真正的数据
相关文章推荐
- Redis内部数据结构详解之简单动态字符串(SDS)
- Redis内部数据结构详解之简单动态字符串(sds)
- redis内部数据结构--简单动态字符串sds
- redis内部数据结构总结(7)intset
- Redis内部数据结构总结(5)skiplist
- redis内部数据结构之SDS简单动态字符串详解
- Redis内部数据结构总结(3)ziplist
- Redis内部数据结构详解(2)——sds
- Redis内部数据结构详解(3)——robj
- Redis内部数据结构总结(4)quicklist
- Redis内部数据结构详解之简单动态字符串(sds)
- Redis内部数据结构总结(2)dict
- Redis内部数据结构详解(2)--sds
- redis----内部数据结构学习
- Redis内部数据结构的实现
- 各种排序(数据结构复习之内部排序算法总结)
- redis系列笔记之数据结构SDS
- redis+php微博功能的redis数据结构设计总结(四)
- redisbook笔记——redis内部数据结构
- Redis内部数据结构实现解析