码迷,mamicode.com
首页 > 其他好文 > 详细

Redis为什么要自己实现一个SDS

时间:2019-10-16 13:26:23      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:数组   溢出   判断   二进制   实现   表示   自己实现   字符串   扩容   

Redis是使用C语言开发的,在C语言中没有字符串这种数据类型,字符串大都是通过字符数组实现的,但是使用字符数组有以下不足:

1. 字符数组的长度都是固定,容易发生空指针
2. 获取字符数组的长度的时候需要便利数组,时间复杂度较高
3. 字符数组长度发生改变之后需要重新分配内存
4. 使用\0表示结尾,在存储二进制的时候就会出现问题。


所以Redis就自己实现了SDS来解决上面的问题,下面是SDS相对的一些优点:
1. 长度达到一定标准会有相应的扩容。从而解决内存溢出的问题。
2. 在SDS的内部定义了字符串的长度,使用时可以直接获取。从而解决获取长度时间复杂度高的问题。
3. SDS是空间预分配,惰性释放内存的。从而减少分配内存的次数
4. SDS根据长度判断结束的位置。从而解决二进制不安全的问题。

Redis为什么要自己实现一个SDS

标签:数组   溢出   判断   二进制   实现   表示   自己实现   字符串   扩容   

原文地址:https://www.cnblogs.com/excellencesy/p/11684549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!