首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊聊Redis SDS

然而,很少有人能说清楚SDS字符串到底是什么,为什么使用SDS字符串比使用C语言字符串效率要高。...什么是SDS SDS全拼为:simple dynamic string,解释为:简单动态字符串。...上图展示了一个SDS实例,len表示该SDS保存了一个5字节长度(不包含结束符)的字符串,free表示该SDS还有5个字节的未使用空间,buf是一个char类型的数组,保存了该SDS所存储的字符串值...与C语言不同,当SDS API需要对SDS进行修改时,API会先检查SDS当前剩余空间是否满足修改之后所需的空间,如果不满足的话API会自动将SDS的空间扩展至修改之后所需空间大小,然后再执行实际的修改操作...如果对SDS修改之后,SDS的长度大于等于1MB,那么程序会分配1MB的未使用空间。

2.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

redis源码之SDS

如果内存分配错误,会导致很严重的后果,就算内存分配没问题,频繁的内存分配也是非常耗费时间的,所以这些都是应该去避免的 惰性空间释放策略 在SDS中首先用到了惰性空间释放策略,惰性空间释放用于优化SDS的字符串缩短操作...当要缩短SDS保存的字符串时,程序并不立即使用内存充分配来回收缩短后多出来的字节,而是使用表头的free成员将这些字节记录起来,并等待将来使用。...源码如下 void sdsclear(sds s) { //重置sds的buf空间,懒惰释放 struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr...return SDS_TYPE_16; #if (LONG_MAX == LLONG_MAX) if (string_size < 1ll<<32) //2^32-1 return SDS_TYPE..._32; return SDS_TYPE_64; #else return SDS_TYPE_32; #endif }

44540

软件定义存储(SDS)之入门

EMC公司在当年的EMC World发布大会上也发布了SDS战略,引发了业界对SDS的大讨论,SDS迅速成为存储业界的研究热点。...而SDS的概念则是最近几年随着华为、杉岩数据等企业产品的逐渐成熟而兴起的。 SDS是个啥? 2012年8月,VMware首次提出软件定义存储的概念。...实际上,SDS的定义出现至今已经三年多了,但仍没有统一的标准。贡献最大的SNIA认为SDS允许异构的或者专有的平台。必须满足的是,这个平台能够提供部署和管理其虚拟存储空间的自助服务接口。...SDS对于初学者需要注意啥? 尽管SDS概念很简单,但过渡到技术既复杂又具有挑战性。...“虽然SDS增长势头强劲,但仍存在一些问题。”栗蔚表示。

1.8K40

Redis SDS 深入一点,看到更多!

二、SDS的优势 1、O(1)时间复杂度获取字符串长度 SDS内部维护着一个字符串长度的len变量,可以直接读取,时间复杂度为O(1)。...图2 与C不同的是,SDS的空间预分配策略可以避免缓冲区溢出发生, 当需要对SDS进行操作时,首先会检查当前空间是否满足需求,不足则扩展当前分配空间。内存检查相对于C变成了内部预置操作。...针对此弊端,Redis 在SDS内存配置策略上采用了空间预分配+惰性删除相结合的策略。 a)空间预分配: 空间预分配用于优化SDS字符扩展操作。...如下,图1执行图2操作后SDS变更为: ?...SDS相关的功能方法会以二进制的形式来操作SDS存储的数据,没有任何中间操作,存储最原始的数据,因此不会有字符层面的因素影响。 SDS可以保存任何源的二进制数据,字符、图片、文件或者序列化的对象等等。

91920
领券