redis 从0到1完整学习 (四):字符串 SDS 数据结构


1. 引言

前情提要:
《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》
本文主要结合源码来介绍 Redis 字符串类型的数据结构

2. redis 源码下载

Redis 源码可以点击这里下载,方便查看其中定义的一些数据结构。
在这里插入图片描述

3. 字符串数据结构

Redis 构建了一种新的字符串结构,称为简单动态字符串(Simple Dynamic String),简称SDS。
在这里插入图片描述
如果了解过 golang 的切片,可以发现两者底层的结构体还是比较类似的。底层是用字符数组存储的,

  • len 表示字符数组真实的长度(不包含\0)
  • alloc 表示已经分配的大小(不包含\0),len <= alloc
  • flags 用来控制 SDS 的 Header 大小

例如,一个包含 age 的 SDS:
在这里插入图片描述

SDS 具备动态扩容的能力:

  • 如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1;
  • 如果新字符串大于1M,则新空间为扩展后字符串长度+1M+1。

例如一个内容为“age”的 SDS,增加 “name” 字符,那么扩容后分配的长度:(3+4)*2+1 = 15,即alloc=15,但是len=7

4. 参考

《redis 从0到1完整学习 (一):安装&初识 redis》
《redis 从0到1完整学习 (二):redis 常用命令》
《redis 从0到1完整学习 (三):redis 数据结构》

相关推荐

  1. redis 01完整学习 (三):redis 数据结构

    2023-12-23 03:16:02       44 阅读
  2. Redis数据结构字符串(sds)

    2023-12-23 03:16:02       5 阅读
  3. go01项目实战体系:函数

    2023-12-23 03:16:02       45 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 03:16:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 03:16:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 03:16:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 03:16:02       20 阅读

热门阅读

  1. 使用卷积进行数据平滑处理

    2023-12-23 03:16:02       37 阅读
  2. ubuntu20.04.3

    2023-12-23 03:16:02       48 阅读
  3. ES 索引关闭source后是否可以更新?

    2023-12-23 03:16:02       38 阅读
  4. 【大数据面试】Kafka面试题与答案

    2023-12-23 03:16:02       38 阅读
  5. GO设计模式——19、中介者模式(行为型)

    2023-12-23 03:16:02       47 阅读
  6. Centos 7.6 gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)

    2023-12-23 03:16:02       37 阅读
  7. TypeScript 常见配置项

    2023-12-23 03:16:02       46 阅读
  8. python异常之try/else分句

    2023-12-23 03:16:02       34 阅读