(Redis教程)简单动态字符串 SDS

简单动态字符串 SDS

在这里插入图片描述
在这里插入图片描述
除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区。

  • AOF缓冲模块中的AOF缓冲区,是由SDS实现的。
  • 客户端状态中的输入缓冲区,是由SDS实现的。

SDS的定义

每个sds.h/sdshdr结构表示一个SDS值:
在这里插入图片描述
在这里插入图片描述

  • free属性的值为0,表示这个SDS没有分配任何未使用空间。
  • len属性的值为5,表示这个SDS保存了一个五字节长的字符串。
  • buf属性是一个char类型的数组
    在这里插入图片描述
    在这里插入图片描述

SDS与C字符串的区别

在这里插入图片描述

  1. 常数复杂度获取字符串长度
  • 对于C字符串,因为不记录自身的长度信息,必须遍历整个字符串
  • 对于SDS,因为SDS在len属性中记录SDS本身的长度,所以获取长度的复杂度为O(1)
  1. 杜绝缓冲区溢出

  2. 减少修改字符串时带来的内存重分配次数

  3. 二进制安全

  4. 兼容部分C字符串函数

猜你喜欢

转载自blog.csdn.net/JAck_chen0309/article/details/106324401