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

Posted song.yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis为什么要自己实现一个SDS相关的知识,希望对你有一定的参考价值。

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

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


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

以上是关于Redis为什么要自己实现一个SDS的主要内容,如果未能解决你的问题,请参考以下文章

第一部分之简单字符串SDS(第二章)

Redis3.20阅读-SDS实现

redis 简单动态字符串 SDS

Redis源码剖析--动态字符串SDS

深挖 Redis 6.0 源码—— SDS

1简单动态字符串SDS