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表示数据指针,向真正的数据