数据结构
动态字符串SDS
redis中保存的Key是字符串,value大多也是字符串或字符串集合,因此字符串是Redis中最常使用的一种数据结构。...不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:
获取字符串长度需要的复杂度为O(N)
非二进制安全,C语言使用空字符’\0’作为字符串结尾的标记,如果保存的字符串本身含义该标记...SDS结构
SDS是C语言实现的一个结构体:
一个简单的例子如下:
动态扩容
在c语言中,如果要对字符串操作:
拼接–>先进行内存重分配来扩展底层数组大小,如果忘记了这一步,会导致缓冲区溢出...,进而提高整体执行效率
并且SDS还提供了惰性空间释放的功能,即对字符串缩短操作而言,不会立刻使用内存重分配算法来回收多出来的字节,而是通过一个free属性进行记录,当后面需要进行字符串增长时,就会用到...,指针跨度不同
Redis使用跳跃表作为有序集合键,如果一个有序集合包含的元素数量很多,或者有序集合中元素成员是比较长的字符串,Redis就会使用跳跃表作为有序集合键的底层实现。