千家信息网

redis SDS的数据结构是怎样的

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇内容介绍了"redis SDS的数据结构是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一
千家信息网最后更新 2025年12月03日redis SDS的数据结构是怎样的

本篇内容介绍了"redis SDS的数据结构是怎样的"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一 前言

redis的字符串数据结构SDS(Simple Dynamic String), 其意指简单的动态字符串,字面上的含义就是smiple 代指简单,操作简单,使用者能够快点理解上手,无需关心redis内部实现;Dynamic 指动态扩展,表是能够自动的对内存空间进行动态分配;String 表示字符串,不难理解。

二 SDS结构

2.1 redis SDS数据结构

redis3.2之前数据结构如下;

struct sdshdr {    unsigned int len;       unsigned int free;      char buf[];         };
  • len 表示 buf(缓冲区)中已经使用的空间长度;

  • free 表示 buf中未使用的长度;

  • buf[] 表示缓冲区数组,存储字符;

2.12 redis 缓冲区结构

更加的形象的一个存储图像如下 buf 中的实际大小为 11(len + free + 1),其中已经使用空间 len = 5 , 未使用空间 free=5; 保留位空字符 \0 占一位;当我们在redis储存进一个字符串zxzxz 的时候 就已经给我们分配好了内存空间,以及后面能用使用的内存空间;如果是c 语言那么要得到一个 zxzxz 字符长度就需要遍历整个字符数组 遇到 \0 (C语言以\0区分内存空间中的字符串)后结束,才计算出一个字符串的长度,然而redis只需要一个sdslen(非c语言读者不必纠结此类API) 就可以计算得出字符串长度; 从算法角度来看 redis 的一次获取字符串长度 为 O(1), c 语言 为 O(N), 所以redis 快很多;

2.2 redis 空间分配策略

其次通过上图可以发现 储存一个字符串 zxzxz , 其所占长度为5 , 为使用空间为5,\0 占1 ;原因是 redis字符串 储存大小小于1MB 的时候 , 存储任意的字符串, 其 free大小永远与 自身的大小相同;当字符串 大小大于1MB时,其就分配free大小固定为1MB, 此称为空间预分配策略; 如果是c语言 则需要 计算当前字符串在buf中的长度,再计算即将追加的字符串长度,然后分配空间大小;故redis 的速度是相当快,相比于c 操作内存空间;

c 语言 在操作内存空间的时候要不断的计算大小,在追加字符串的时候分配空间大小,如果未进行分配,那么追加的字符串有可能覆盖已经 已经储存到 内存空间的字符串; 比如 内存空间 储存 zzz \0kkk\0; 储存 zzz 的时候所占用3 个位,加一个未分配空间1位,如果向zzz字符串进行追加一个ggg, 那么在未进行计算分配空间的情况下 原有的数据会变成 zzzggg\0k\0, 很直观的发现 内存溢出, 第一个字符串就覆盖至第二个字符串的部分内容;

所以 redis 的操作内容空间是杜绝内存溢出,并且能够储存图片,视频等二进制数据,如果是c语言操作储存,二进制文件中一个\0就可能导致内存泄漏,缓冲区溢出等,故c语言一般只操作文本文件;

"redis SDS的数据结构是怎样的"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

字符 字符串 空间 内存 分配 大小 长度 语言 数据 结构 数据结构 时候 内容 缓冲区 缓冲 动态 存储 二进制 实际 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国有企业网络安全管理制度内容 企事业单位网络安全动漫图片 对用友财务软件开发的要求 在小公司做window服务器 思安信息网络安全 施乐服务器装系统要多久 如何搭建本地服务器并挂软件 南北数据库 网络安全的论文摘要 宣传网络安全知识文字 数据库如何备份sql 数据库服务器显示网卡断开连接 海康威视门禁人脸识别服务器 麒麟合盛网络技术是干什么的 怎么看全国大学生网络安全证书 扬讯软件开发有限公司招聘 群晖存储服务器更换硬盘 cae软件开发兼职 小红书的数据库营销启示 育碧服务器崩了还能玩游戏吗 数据库ping通才能连接 网上选课管理系统数据库设计 网络安全教育主题图片 python零基础软件开发 中国高等植物红色名录数据库 aws云服务器价格 服务器性能指标 cpu it开发和软件开发区别 小红书的数据库营销启示 视频管理服务器是流媒体服务器吗
0