当前位置: 首页 > news >正文

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

文章目录

  • 1. 引言
  • 2. redis 源码下载
  • 3. 字符串数据结构
  • 4. 参考


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 数据结构》

相关文章:

  • 深信服AF防火墙升级步骤(简单粗暴)
  • 论文笔记:Accurate Localization using LTE Signaling Data
  • 类和对象(下篇)
  • .Net Core webapi RestFul 统一接口数据返回格式
  • 【WebRTC---源码篇】(二十五)音视频同步
  • C++之深拷贝和浅拷贝
  • 测试理论知识四:大型软件的测试技巧——单元测试
  • DotNet Core 在Centos上使用环境变量运行 urls 参数
  • 《每天一分钟学习C语言·七》指针、字节对齐等
  • 只更新软件,座椅为何能获得加热功能?——一文读懂OTA
  • npm的使用技巧
  • UE5 Landscape 制作GIS卫星图地形
  • docker的应用和定义
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]
  • RTP/RTCP/RTSP/SIP/SDP/RTMP对比
  • 【css3】浏览器内核及其兼容性
  • angular组件开发
  • axios 和 cookie 的那些事
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • emacs初体验
  • httpie使用详解
  • Java 23种设计模式 之单例模式 7种实现方式
  • Laravel Telescope:优雅的应用调试工具
  • Laravel 菜鸟晋级之路
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Terraform入门 - 3. 变更基础设施
  • vagrant 添加本地 box 安装 laravel homestead
  • 安卓应用性能调试和优化经验分享
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 前端之React实战:创建跨平台的项目架构
  • 使用 Docker 部署 Spring Boot项目
  • 延迟脚本的方式
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • linux 淘宝开源监控工具tsar
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​MySQL主从复制一致性检测
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net - 类的介绍
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net中我喜欢的两种验证码
  • ??javascript里的变量问题
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [Android]使用Git将项目提交到GitHub
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [autojs]autojs开关按钮的简单使用
  • [Bugku]密码???[writeup]