SDS结构与优势-创新互联

1.SDS结构 1.1 SDS简介

Redis的key和value的基础数据类型都是字符串类型。这种字符串类型是一种自定义的数据类型,simple dynamic string (SDS)。
注:

创新互联公司是一家集网站建设,赣州企业网站建设,赣州品牌网站建设,网站定制,赣州网站建设报价,网络营销,网络优化,赣州网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

在这里插入图片描述
type country查看的是country(key)对应的value的类型为string类型,是Redis的五种类型,String,List,Hash,Set,ZSet等
object encoding country查看的是country(key)对应的value的内存种存储的类型为embsrt,即SDS
在这里插入图片描述
type age查看的是age(key)对应的value的类型是string类型,String,List,Hash,Set,ZSet等
object encoding age查看的是age(key)对应的value的存储类型为int型

Redis字符串并不全都是SDS,也有可能出现C语言的字符串(Redis是由标准C开发)。C字符串只有可能出现在字符串“字面常量种”,并且该字符串不能变更。例如:
(1)get命令返回的字符串
在这里插入图片描述

(2)设置日志时的字符串

Redislog(REDIS_WRINNING,"SDFSDFSDF");
1.2 SDS结构

在这里插入图片描述
SDS是一个结构体,定义在Redis安装目录下的src/sds.h中
而C字符串使用len+1长度的字符数组来表示实际长度为len的字符串,字符数组最后以’\0’结尾,但不能满足Redis对于字符串功能性,安全性及高效性的要求。

2 SDS的优势 2.1 防止"字符串长度获取"性能瓶颈

通过len字段得到字符串实际长度,而无需遍历整个字符串

2.2保障二进制安全

SDS不以’\0’作为结束,可以保存图像,音视频等数据中存在’\0’的情况。而对于C语言的字符串,需要对数据进行限制,或者替换’\0’

2.3减少内存再分配次数

对于C语言字符串来说,将两个字符数组拼接(strcat(s1,s2))时需要重新分配足够多的新内存,这导致了性能的消耗.
SDS采用了空间预分配策略与惰性空间释放策略来避免内存再分配问题
空间预分配策略:
每次SDS进行空间扩展时,程序不但为其分配所需的空间,还会为其分配额外的未使用的空间,减少内存的再分配次数,而额外分配的未使用空间大小取决于空间扩展后SDS的len属性值
1)如果需要分配的额外空间小于1M,则分配未使用的空间大小与len长度相同
2)如果需要分配的额外空间大于1M,则分配的未使用空间大小固定未1M
惰性空间释放策略:
SDS字符串长度如果缩短,那么多出来的未使用空间将暂时不释放,而是增加到free额外空间中 ,以使后期扩展SDS时减少内存再分配次数

2.4 兼容C函数

Redis中提供了很多的SDS的API,同时为了兼容C函数,SDS的底层数据buf[]中的字符串仍然以空字符串’\0’结尾
注:比较双方一个是SDS,一个是C字符串,此时可以通过C语言函数
strcmp(sds_str->buf, c_str)

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:SDS结构与优势-创新互联
浏览地址:http://ybzwz.com/article/dchdds.html