什么是简单动态字符串?
Redis没有直接使用C语言的字符串,而是自己封装了一种字符串,叫SDS(简单动态字符串)
哪些地方使用到了SDS?
在存储数据中,redis中键值对中键或值可以SDS,如果值是一个链表,链表中包含多个SDS,SDS类型于里面的最基本数据类型
除了存储数据,还有哪些地方使用到了SDS?
SDS还被用作缓冲区:AOF时作为AOF的缓冲区,以及客户端输入缓冲区
为什么要使用SDS,而不使用C字符串?
SDS的C源码结构是什么样的?SDS是如何实现的?
3.2之前的版本:
sturct sdshdr{
unsigned int len;//已使用的字符串长度
unsigned int free;//未使用的字符串长度
char buf[];//字符串数组的引用
}
3.2之后的版本:根据字符串的长度,有5种结构体
C字符串与SDS有哪些区别?
C语言中分配N+1个字符串的空间,能存储N个字符串,空字符结尾
C语言获取一个字符串的长度,需要遍历一个字符串,时间复杂度O(n)
在SDS中直接访问len属性,就可以得到SDS的长度,时间复杂度为O