首页 > 作文

了解下Redis的SDS结构

更新时间:2023-04-08 08:52:56 阅读: 评论:0

sds (简单动态字符串)

sds是redis里面的一种结构,通过它对字符串的操作进行了很多的优化操作。

sds的结构定义

struct  stdhdr {   int len  //记录buff数组中已使用字节的数量   int free //记录buff数组中未使用字节的数量   char buff[] //字节数组,用于保存字符串}

sds的示例,见下图

free值为0, 表示这个sds没有分配任何未使用空间。
len值为4, 表示这个sds保存一个非主流的歌四字节长的字符串。
buff值为一个char类型数组,分别保存’l‘,’i’,’a’,’n’ 4个字符,最后一个字节保存;’\0‘

sds与c字符串的区别

c语言使用长度n+1的字符数组来表示长度为n的字符串,并且最后一个字符串总是空字符串’\0‘.
,而且它并不记录自身的长度信息,如果要获取,必须全部遍历;但sds不一样,他有len属性记录了长度,所以获取长度的复杂度很高。

c字符串容易缓冲区溢出,而sds的空间分配策略则不会,当需要操作字符串时通用技术,原来我们都是幸福的会先检测空间大小,如果不满足,则需要对空间做扩展。

c在对字符串做修改时,因为没有记录长度信息,所以需要频繁对内存做分配,而sds通过free属性来记录未使用的空间,实现空间预分配和惰性空间释放。

#### 1 空间预分配

空间预分配用于优化sds的字符串增长操作,当对sds字符做修改时,不仅会分配所需要的空间,还会为sds分配额外的未使用空间。

分配未使用空间策略如下

如果对sds操作后,sds的长度(len的值)小于1m,那么程序分配和le风热感冒症状n同样大小的未使用空间。如果对sds操作后,sds的长度(len的值)大于等于1m,那么程序会分配1m的未使用空间。

#### 惰性空间释放

惰性空间释放用于优于sds的字符串缩短操作,当缩短sds字符串时,程序不立即使用内存重分配回收多出来的字节,而是用free属性记录,下交要用时,查看 free的大小,避免重复分配了。

c字符串不能包含空字符,所以它只能保存文本数据,不能保存图片、音频、视频等二进制数据,而sds都教师节致辞会处理二进制的方式来处理buff数组里面的数据,也不会对数据做任何限制、过滤等,存取数据一致。

虽然sds是二进制安全的,但字符串结尾和c一样,也是以空字符串作结尾。这样就能兼容一部分c字符串函数了。

本文发布于:2023-04-08 08:52:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a45d6dca8973f4f7328b9b717dba5fb1.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:了解下Redis的SDS结构.doc

本文 PDF 下载地址:了解下Redis的SDS结构.pdf

标签:字符串   空间   分配   长度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图