刚刚看了下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