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

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值