
redis设计与实现
文章平均质量分 81
ayugudu
兴趣使然
展开
-
Redis 持久化
文章目录1 RDB 持久化1.1 RDB文件的创建1.2 RDB文件的载入1.3 自动间隔性保存1.4 RDB文件结构2 AOF持久化功能2.1 命令追加2.2 AOF文件的写入与同步2.3 文件的写入与同步2.4 AOF文件的载入与还原2.5 AOF重写2.6 AOF后台重写3 重点回顾 1 RDB 持久化 Redis 提供了RDB持久化功能,这个功能可以将Redis在内存中的数据库状态保存到磁盘中,避免数据意外丢失。 RDB持久化功能时生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成R原创 2021-10-25 11:06:56 · 127 阅读 · 0 评论 -
redis设计与实现-数据库篇
Redis 数据库 1服务器中的数据库 redis服务器将所有数据库都保存在服务器状态redisServer 结构的db数组中,db数组的每个项都是redisDb结构 struct redisServer{ // 保存者服务器中的所有数据库 redisDb * db; // 服务器的数据库数量 int dbnum; } redis 服务器默认会创键16个数据库。 2切换数据库 每个redis 都有自己的目标数据库,每当客户端执行数据库写命令或者数据库读原创 2021-10-14 10:47:53 · 767 阅读 · 0 评论 -
万字总结 !!redis数据结构与对象
文章目录前言1 简单字符串1.2 sds与c字符串的区别1.2.1 常数复杂度获取字符串长度1.2.2 杜绝缓冲区溢出1.2.3 减少内存重分配现象1.2.4 二进制安全1.3 总结2 链表3 字典3.2 哈希算法3.3 解决键冲突3.4 rehash3.5哈希表的扩展与收缩3.6 渐进式rehash4 跳跃表4.1 跳跃表的实现4.2 跳跃表节点4.3 重点5 整数集合5.1 整数集合的实现5.2 升级5.3 降级5.4 重点6压缩列表6.1 压缩列表的构成6.2 压缩列表节点的构成6.2.1 previ原创 2021-10-08 11:03:53 · 2640 阅读 · 0 评论 -
redis 列表的实现(压缩列表)
1压缩列表 压缩列表是列表键和哈希键的底层实现,当一个列表键只包含少量列表项,并且每个列表项要么是小整数值,要么就是长度比较短的字符串,那么redis就会使用压缩列表来实现。 1.1 压缩列表的构成 压缩列表是redis为了节约内存而开发的,是由一系列的特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或一个整数值。 属性 类型 长度 用途 zlbytes uint32_t 4字节 记录整个压缩列表占用的内存字节数 zltail u原创 2021-09-30 10:43:38 · 424 阅读 · 0 评论 -
redis 整数集合底层实现
1 整数集合 整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合数量不多时,redis会使用整数键作为集合键的底层实现。 1.1 整数集合的实现 整数集合是redis用于保存数值的数据结构,可以保存类型 int16_t,int32_t,int64_t的整数值,并且保证集合中不会出现重复元素。 typedef struct intset{ // 编码方式 uint32_t encoding; //集合中包含的元素数量 uint32_t length;原创 2021-09-29 15:16:42 · 151 阅读 · 0 评论 -
redis 跳跃表底层实现
1 跳跃表 跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点。 跳跃表实现了有序集合键(zset)。 1.1 跳跃表的实现 redis 跳跃表是由zskiplistNode,zskipList。 zskiplistNode用于表示跳跃表节点,而zskiplist则用于保存跳跃表节点相关信息。 header:指向跳跃表的表头节点 tail:指向跳跃表表尾节点 level: 记录跳跃表,层数最大的节点层数 length: 记录跳跃表的长度,也就是跳跃原创 2021-09-29 11:00:34 · 226 阅读 · 0 评论 -
redis 底层哈希表结构
1 字典 字典是符号表,是一种用于保存键值对的抽象数据结构。字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点保存了字典中的一个键值对。 哈希表的实现 typedef struct dictht{ //哈希表数组redis设计与实现 dictEntry **table; //哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 unsigned long sizemask;原创 2021-09-26 09:01:16 · 206 阅读 · 0 评论 -
redis 链表结构
链表 链表提供了高效的节点重排能力,以及顺序性的节点访问方式。 redis 链表实现 typedef struct list{ //表头指针 listNode *head; //表尾指针 listNode *tail; //链表所包含的节点数量 unsigned long len; //节点值 复制函数 void *(*dup) (void *ptr); //节点值 释放函数 void (*free)(void *ptr);原创 2021-09-24 12:12:34 · 184 阅读 · 0 评论 -
redis 简单动态字符串(SDS)
1 简单字符串 redis 自己构建了一种名为简单动态字符串sds的抽象类型,并将sds用作redis的默认字符串类型。 set msg "hello" 键值对的键是字符串对象,实现是保存字符串“msg”的sds 键值的值是字符串对象,是保存字符串“hello”的msg SDS的定义 struct sdshdr{ //记录已使用的字节的数量 int len; // 记录数组中未使用的字节数量 int free; //字节数组,用于保存字符串 char b原创 2021-09-24 11:25:47 · 223 阅读 · 0 评论