Redis设计与实现
2022-02-10 16:22:47 0 举报
AI智能生成
Redis设计与实现,书内内容摘抄,可能后面有几章不全
作者其他创作
大纲/内容
整数集合
intset
uint32_t encoding;
编码方式
uint32_t length;
集合包含的元素数量
int8_t contents[];
保存元素的数组
压缩列表
ziplist
列表键和哈希键的实现原理之一
zlbytes
记录整个压缩列表占用内存字节数,进行内存重分配或计算zlend时使用。
zltail
记录压缩列表尾节点距离压缩列表起始地址多少字节。
zllen
节点数量。小于65535时,表示节点数量;大于时,需要遍历才能计算得出。
zlend
特殊值0xFF用于标记压缩列表的末端。
entryx
列表节点。
previous_entry_length
记录压缩列表前一个节点的长度
encoding
节点的content属性所保存数据类型和长度
content
存储节点的值。
数据结构与对象
底层数据结构
sds
链表和链表节点
字典
struct和哈希表数组
跳跃表
struct和跳跃表节点
压缩列表
struct和列表节点
整数集合
元素数组
对象(实际的数据结构)
字符串对象
REDIS_STRING
RDEDIS_ENCODING_INT
底层是struct和整数值
RDEDIS_ENCODING_EMBSTR
底层是struct和sds(分配一整块内存空间)
RDEDIS_ENCODING_RAW
底层是struct和sds
列表对象
REDIS_LIST
RDEDIS_ENCODING_ZIPLIST
压缩列表和struct
RDEDIS_ENCODING_LINKEDLIST
struct、链表和sds
相当与JAVA中的list
哈希对象
REDIS_HASH
RDEDIS_ENCODING_ZIPLIST
压缩列表和struct
RDEDIS_ENCODING_HT
struct和字典、sds
相当与JAVA中的hashmap
集合对象
REDIS_SET
RDEDIS_ENCODING_INTSET
struct和整数集合
RDEDIS_ENCODING_HT
struct和字典、sds,字典的值设为null
相当与JAVA中的hashset
有序集合对象
REDIS_ZSET
RDEDIS_ENCODING_ZIPLIST
压缩列表和struct
RDEDIS_ENCODING_SKIPLIST
strcut和跳表、字典
键值对
键
字符串对象
值
字符串对象
列表对象
哈希对象
集合对象
有序集合对象
编码
long类型的整数
RDEDIS_ENCODING_INT
embstr编码的简单动态字符串
RDEDIS_ENCODING_EMBSTR
简单动态字符串
RDEDIS_ENCODING_RAW
字典
RDEDIS_ENCODING_HT
双端链表
RDEDIS_ENCODING_LINKEDLIST
压缩列表
RDEDIS_ENCODING_ZIPLIST
整数集合
RDEDIS_ENCODING_INTSET
跳跃表和字典
RDEDIS_ENCODING_SKIPLIST
SDS(Simple dynamic String)
int len;
buf数组中已经使用的字符串长度
int free;
buf中未使用的字符串长度
int buf[];
存储字符串
链表
LinkedList
ListNode
struct ListNode *prev;
上一节点
struct ListNode *next;
下一节点
void *value;
值
void *(*dup)(void *ptr);
节点复制函数
void *(*free)(void *ptr);
节点释放函数
void *(*match)(void *ptr,void *key);
节点对比函数
unsigned long len;
链表包含的节点数量
字典
dictht
dicEntry **table;
哈希表数组
unsigned long size;
哈希表大小
unsigned long sizemask;
哈希表掩码,用于计算索引值,总是等于size-1
unsigned long used;
该哈希表已有节点数量
dictEntry(哈希表节点)
dicEntry *key;
保存键值对中的值
union
void *val;
可以是指针
uint64_t u64;
整数
int64_t s64;
整数
struct dicEntry *next;
指向下一个哈希表节点,形成链表
跳跃表
zskiplist
structz zskiplistNode *header,* tail;
表头结点和表尾节点
头结点没有score
unsigned long length;
表中节点的数量
int level;
表中层数最大的节点层数
zakiplistNode(跳跃表节点)
double score;
分值
robj *obj;
成员对象
struct zskiplistNode *backward;
后退指针
struct zskiplistlevel
struct zskiplistNode *forward;
前进指针
unsigned int span;
跨度
收藏
收藏
0 条评论
下一页