栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Redis-SDS

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis-SDS

简单动态字符串(SDS) SDS定义

​ 在C语言中字符串是以空字符结尾的字符数组

在redis中SDS的实现与C语言类似但是没有直接使用C语言的字符串类型 伪代码如下:

SDS {
	//字符串长度
	int len;
	//数组中剩余长度
	int free;
	//字节数组 用于保存字符串
	//结尾为'/0'可以方便找到插入位置
	char[] buf[]
}
SDS与C区别
  • C语言字符串获取长度时间复杂度为O(n)SDS直接获取len复杂度为O(1)

  • C语言在扩容或产生缓冲区溢出问题 SDS会先检查空间是否足够如果不足够会进行扩容

C字符串SDS
获取长度复杂度为O(N)获取长度复杂度为O(1)
API是不安全的,可能会造成缓冲区溢出API是安全的,不会造成缓冲区溢出
修改字符串N次必然执行N次内存分配最多执行N次内存分配
只能 保存文本数据可以保存文本和二进制数据
可以只用所有库中的函数部分使用
SDS的空间分配策略
  • 空间预分配策略

    • 在进行修改时判断是否足够不够的话 会扩容一倍 如修改之后为10字节 会扩容到10+10+1 字节
    • SDS长度大于1MB每次修改会增加1MB+1字节
    • 使得增长N次字符串最多增长N次
  • 惰性空间释放

    • 在SDS缩短时会不会真正的释放空间而是增加free 方便下次增加使用
    • 如果需要真正的释放需要调用相关API
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号