最近学习看黄健宏先生写的《redis设计与实现》,开篇即介绍了redis的基础数据结构和数据对象,看了一遍后觉得还是有点没弄明白相互之间的关系,觉得很有必要整理一下自己的思绪。
1. redis基础数据结构
- 简单动态字符串 -SDS
- 双链表 -list
- 字典 -dicht(hashtable)
- 跳跃表 -skiplist
- 整数集合 -intset
- 压缩列表 -ziplist
2. redis基础数据对象
字符串对象
- raw类型
- int 型
- emstr型
列表对象
- ziplist
- linkedlist
哈希对象
- ziplist
- hashtable
集合对象
- intset
- hashtable
有序集合对象
- ziplist
- skiplist
3. 数据结构的详细说明
3.1 简单动态字符串 -SDS
简单动态字符串实际是对c语言char*的封装,redis实现于在sds.h中,类似于c++的string,以及stl的vector。是一种常用的封装。它是用如下的数据结构。
struct sdshdr {
int len; // buf 中已占用空间的长度
int free; // buf 中剩余可用空间的长度
char buf[]; // 数据空间
};