Redis3.20阅读-SDS实现
声明:这是本人参考黄建宏的《redis设计与实现》(源码版本是redis3.0)来学习redis3.20源码的笔记,如果有什么不对的地方,欢迎大家指正,大家一起学习、一起进步,QQ:499656254。 一、SDS介绍 SDS又叫简单动态字符串,在Redis中默认使用SDS来表示字符串。比如在Redis中的键值对中的键一般都是使用SDS来实现。首先需要说明的是在Redis中,字符串不是用传统的字符串来实现,而是Redis自己构建了一个结构来表示字符串。优点如下: 1、O(1)时间内获取字符串长度。(依据其结构特性,只需要访问其结构体成员len既可获得字符串长度) 2、SDS提供的一些API操作,是二进制安全的(也就是不会因为空格等特殊字符而中断字符串)、不会溢出(API操作会检查其长度) 3、减少了修改字符串时带来的内存重分配次数。 对于增长字符串其采用的策略是检查修改之后的长度大小,如果小于1024*1024,则分配2倍的修改后的长度+1 对于减少的字符串其并不立即释放空间,而是回归到alloc中去。 这个构建的结构在Redis3.20中的表示如下(和Redis2.x中还是有一定区别的): typedef char *sds; /* Note: sdshdr5 is never used, we just access the flags byte directly. *