美文网首页
redis数据结构--SDS

redis数据结构--SDS

作者: MontyOak | 来源:发表于2019-04-14 21:19 被阅读0次

redis底层存储字符串的数据结构叫做简单动态字符串(simple dynamic string)。

SDS定义

下面是SDS的简单定义:

struct sdshdr {
  int len; // 记录buf已使用的字符串长度
  int free; // 记录buf未使用的字符串长度
  char buf[]; // 字节数在
}

相比于原生的C语言中的字符串,SDS具备以下优点:

  • O(1)复杂度获取字符串长度
  • 杜绝缓冲区溢出 这是记录了free之后带来的好处
  • 减少修改字符时内存重新分配的次数 因为预留了free长度的空间,关于空间分配,有以下两种策略:
    1. 空间预分配 具体分配策略是,如果SDS长度小于1MB,则分配和len相等的free,如果SDS长度大于1MB,则free=1MB。
    2. 惰性空间释放 当buf存储内容减少的时候,并不立即释放空间,而是通过增加free的值来把空间预留下来备用。
  • 二进制安全 用len记录字符真实长度,防止因为'\0'而出现的内容提前截断
  • 兼容部分C的字符串操作函数 为buf加上'\0'结尾,直接复用部分c的字符串操作函数

相关文章

  • Redis容量评估模型

    一、redis常用数据结构 做容量评估之前,有必要对redis常用数据结构有大概了解。 1、SDS redis没有...

  • Redis设计与实现-笔记(一)

    数据结构与对象 Redis的底层数据结构,了解Redis的底层数据结构有助于我们更好的运用Redis。 SDS R...

  • Simple Dynamic String (SDS)

    Simple Dynamic String (SDS) SDS是在redis中用于表示字符串的数据结构,相比C语言...

  • reids string

    redis中支持的数据结构都是经过设计优化的数据结构和算法。 1. redis string数据结构 见sds.h...

  • Redis底层数据结构

    Redis底层数据结构类型 简单动态字符串(simple dynamic string)SDS Redis 没有直...

  • Redis源码

    一、Redis数据结构: SDS SDS(动态字符串)包含字符数组buf[],字符数组现有长度len,字符数组分配...

  • redis基本数据结构

    redis 基本数据结构. redis的基本数据结构主要有: SDS动态字符串,链表,字典,哈希表,跳跃表,整数集...

  • redis

    redis Redis 数据结构和底层实现string:简单动态字符串SDS,Redis 的字符串是动态字符串,是...

  • Redis字符串与C字符串区别

    一、数据结构 redis的字符串底层数据结构是sds(simple dynamic string),即简单动态字符...

  • redis笔记

    redis基础知识 数据结构 底层数据结构 SDS 双向链表 压缩列表 跳跃表 Hash表 整数数组 对外数据结构...

网友评论

      本文标题:redis数据结构--SDS

      本文链接:https://www.haomeiwen.com/subject/erfewqtx.html