redis设计与实现笔记(一)
字符串
Redis的字符串用的是自己构建的字符串,称作SDS(简单动态字符串),除了用于保存数据库中的字符串以外,SDS还被用作缓冲区。
定义
- free代表是否分配空间
- len代表长度
- buf是char数组
获取Redis的SDS的长度为O(1)复杂度
长度
当SDS长度即将溢出的时候,会自动扩容。类似vector,SDS会进行空间额预分配,当SDSDE长度小于1MB的时候,预分配1倍的空间,大于1MB的时候,预分配会多分配1MB。
惰性空间释放
缩短SDS的时候,程序不会回收字节,而是仅做一下标记,增长free字段的长度。
二进制安全
SDS所有的API都会以处理二进制的方式来处理存放在buf数组里的数据,不会做限制。
和C的主要区别
字典
Redis中的字典是哈希表,
redis设计与实现笔记(一)