The Design and Implementation of Redis
第二章 简单动态字符串
simple dynamic string(SDS)
O(1)时间获取长度
杜绝了缓存区溢出
空间预分配
SDS 长度小于1MB,就分配同样大小未使用空间
SDS 长度大于1MB,就分配1MB未使用空间
惰性空间释放,不立刻释放未使用内存
二进制安全,读取会和写入完全一样
兼容部分 C 字符串函数,最后以
\0结尾第三章 Redis 的链表
广泛用于实现 Redis 的各种功能,比如列表键、发布与订阅、慢查询、监视器等
双端
无环,表头的 prev 和表尾的 next 都是 NULL
带表头指针和表尾指针,可从头也可从尾遍历
带长度计数器
多态,用
void*来保存节点值,可保存各种类型第四章 Redis 的字典
哈希表的数据结构
```c typedef struct dictht { // 哈希表数组 dictEntry ** table;
// 哈希表大小 unsigned long size;
// 哈希表大小的掩码,与运算可直接获得索引 // 值是 size-1 unsigned long sizemask;
// 已有节点数量 unsigned long used; } dictht;
typedef struct dictEntry {
} dictEntry;
typedef struct dict {
} dict;
typedef struct dictType {
} dictType;
typedef struct zskiplistNode {
} zskiplistNode;
typedef struct zskiplist {
};
typedef struct intset {
};
typedef struct redisObject {
} robj;
```
对象
对象type属性的值
TYPE命令的输出
字符串对象
REDIS_STRING
"string"
列表对象
REDIS_LIST
"list"
哈希对象
REDIS_HASH
"hash"
集合对象
REDIS_SET
"set"
有序集合对象
REDIS_ZSET
"zset"
底层实现
类型
编码
对象
REDIS_STRING
REDIS_ENCODING_INT
使用整数值实现的字符串对象
REDIS_STRING
REDIS_ENCODING_EMBSTR
使用embstr编码的简单动态字符串
REDIS_STRING
REDIS_ENCODING_RAW
简单动态字符串
REDIS_LIST
REDIS_ENCODING_ZIPLIST
使用压缩列表实现的列表对象
REDIS_LIST
REDIS_ENCODING_LINKEDLIST
使用双端链表实现的列表对象
REDIS_HASH
REDIS_ENCODING_ZIPLIST
使用压缩列表实现的哈希对象
REDIS_HASH
REDIS_ENCODING_HT
使用字典实现的哈希对象
REDIS_SET
REDIS_INTSET
使用整数集合实现的集合对象
REDIS_SET
REDIS_ENCODING_HT
使用字典实现的集合对象
REDIS_ZSET
REDIS_ENCODING_ZIPLIST
使用压缩列表实现的有序集合对象
REDIS_ZSET
REDIS_ENCODING_SKIPLIST
使用跳跃表和字典实现的有序集合对象
Last updated
Was this helpful?