简单动态字符串体现的Reids的优秀设计思想

153 阅读1分钟

刚刚看了下Redis底层数据实现方式

String 简单动态字符串

List 双向链表 压缩列表

Hash 哈希表 压缩列表

Set 整数数组 哈希表

SortSet 跳表 压缩列表

产生一个疑问:什么是简单动态字符串?

struct sdshdr{

 int len; //记录buf中已使用字节的数量等于SDS所保存的字符串的长度
 
 int free; //记录buf中未使用字节的长度

 char []buf; //字节数据,保存字符串

}  

进一步思考:java里 String 的底层数据结构也是一个 char value[];

public String() { this.value = new char[0]; }

但是默认构造函数初始值是0,如果一个字符串长度发生变化,那必须要重新分配一个char数组,但是Redis的sdshdr结构可以通过len 和 free判断是否需要扩展char长度,不得不说这是一个非常优秀的设计,未来也许java也会借鉴这种设计思想,这就是我们为什么要读不同源码的意义把。 ————————————————

vx:be_coder