redis-数据结构
String : key:value : 底层实现 : sds 整数集合
list : key:[value] :底层实现 :双端链表 压缩链表
hash : key: [field:value][field:value][field:value] :底层实现 : 压缩链表 字典
set : key:[value(不重复)] :底层实现 :字典 整数集合
zset : key:[value(不重复有序)] : 底层实现 :跳跃链表 sds
1.sds:
简单动态字符串 :buf:char数组 len:已占用长度 free:剩余可用长度
sdshdr{
//已占用长度
int len;
//剩余可用长度
int free
//char数组
char[] buf;
}
当字符串进行append操作时,不需要每次都进行内存的重新分配。
2.压缩链表
一块连续的内存结构快,适合保存整数和受限字符数组,省掉了前驱和后驱指针,通过计算节点的长度来遍历。
node{
//前面一个节点的总长
pre_entry_length
//当前节点的编码
encoding
//当前节点内容的长度
length
当前节点的内容
content
}
3.双端链表
标准的双向链表
node{
//前驱
pre
//后驱
next
//内容
content
}
4.字典
参照倒排索引
5.跳跃链表
结构与双向链表一样,但将双向链表分层,存有序的数据。