《Redis设计与实现》之SDS

整理该书的重点知识,刚开始看这本书,发现作者整理的很好,比之前直接看源码舒服很多,看完书再看源码,就很简单、有趣了。

1、SDS(simple dynamic string,简单动态字符串),简单的讲Redis作者自己封装了一种字符串的抽象类型,和C语言字符串相比有诸多优点。

定义:

sds.h/sdshdr
struct sdshdr{
    int len;//保存字符串的长度
    int free;//buf数组中未使用的字节长度
    char buf[];//字节数组,用于保存字符串
};

优点:

①二进制安全,意思是可以在字符串中存储‘\0’,普通的C字符串遇到‘\0’就认为是结尾了。

②获取字符长度复杂度为O(1)。

③API不会造成缓冲区溢出。

④修改字符串长度N次最多需要执行N次内存分配。

2、优化策略

空间预分配

对SDS修改后,如果SDS长度小于1MB,则分配与len属性相同的大小的未使用空间;如果SDS长度大于等于1MB,则分配1MB的未使用空间。

惰性空间释放

释放空间的时候,使用free属性记录这些释放的字节,以备下次使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值