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