文档章节

redis数据结构-简单动态字符串(sds)

将将将
 将将将
发布于 2015/11/24 16:16
字数 471
阅读 86
收藏 0

redis没有使用c的字符串,而是自己构建了sds,但是为了重用c字符串的很多方法,sds跟c一样最后一个字节保存一个空字符‘\0’

sds与c字符串的主要区别

1、c获取字符串长度的复查度是o(N),而sds是o(1),sds的长度动态记录在len中

2、缓存区溢出,c字符串不记录自身长度,在字符串合并时可能会造成缓冲区溢出,sds在字符串拼接时候,会检查空间时候足够,如果不足,会先扩容,然后才执行拼接操作

3、sds比起c字符串,减少字符串修改时内存的重分配次数,sds采用空间预分配和惰性空间释放策略

    3.1 空间预分配

        当字符串增长时候,sds不仅会分配增长需要的空间,还会额外分配未使用空间。修改后sds的长度(len)小于1MB,会额外分配 len 长度的空间;sds修改后的长度(len)大于1MB,会额外分配1MB空间

    3.2 惰性空间释放

        当sds收缩时,并不会立即回收释放的空间,而是使用free标记起来,等待将来使用

4、二级制安全

    c字符串在读到'\0'时候,就认为是字符串结尾,这样的限制使得c字符串自能保存文本数据,不能保存图片,音频,视频等数据,而sds都会以处理二进制的方式来处理buf里面的数据,数据写进去是什么样,读出来就是什么样

5、兼容c字符串函数

    sds采用末尾保留'\0',就是为了兼容c字符串




© 著作权归作者所有

将将将
粉丝 24
博文 30
码字总数 13288
作品 0
深圳
程序员
私信 提问
redis数据结构实现--简单动态字符串

redis数据结构实现--简单动态字符串 1. SDS简单动态字符串详解 sds是redis自己实现的一种数据结构,用来作为redis底层默认字符串,与c语言的字符串区别开来。 在redis中c字符串一般用于不需要...

jackrabb1t
2018/11/20
0
0
Redis 数据结构-字符串源码分析

相关文章 Redis 初探-安装与使用 本文将从以下几个部分进行介绍 1.前言 2.常用命令 3.字符串结构 4.字符串实现 5.命令是如果操作字符串的 前言 平时在使用 Redis 的时候,只会使用简单的 se...

tsmyk0715
2018/08/11
1K
0
Redis字符串类型实现内幕

摘要 Redis不仅仅是一个key-value存储,它更是一个数据结构服务,支持不同类型的值。这意味着在传统的key-value存储中,我们用string的key关联string的value。而在Redis中,我们可以存储的值...

Float_Luuu
2016/05/15
1K
0
Redis 的基础数据结构(一) 可变字符串、链表、字典

这篇文章关于 Redis 的基础数据。阅读这篇文章你可以了解: 动态字符串(SDS) 链表 字典 三个数据结构 Redis 是怎么实现的。 SDS SDS (Simple Dynamic String) 是 Redis 最基础的数据结构。...

哲别0
2018/05/07
23
0
Redis数据结构——SDS,链表

简单动态字符串 struct sdshdr { unsigned int len; //记录buf数组中已使用字节的数量 等于SDS所保存字符串的长度 unsigned int free; // 记录buf数组中未使用字节的数量 char buf[]; //字节...

nao
2016/05/04
108
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
29分钟前
6
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
29分钟前
6
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
30分钟前
6
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
33分钟前
8
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
34分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部