Redis设计与实现读书笔记
文章平均质量分 95
小宇哥x
这个作者很懒,什么都没留下…
展开
-
Redis设计与实现读书笔记一、数据结构与对象
文章目录一、数据结构与对象1、简单动态字符串(SDS)1.1 SDS的定义1.2 SDS相比C字符串的优势1.2.1 常数复杂度获取字符串长度1.2.2 杜绝缓冲区溢出1.2.3 减少修改字符串时带来的内存重分配次数1.2.4 二进制安全1.2.5 兼容部分C字符串函数1.2.6 总结1.3 SDS API1.4 重点回顾2、链表(linkedlist)2.1 链表和链表节点的实现2.2 重点回顾3、字典(hashtable)3.1 字典的实现3.2 解决键冲突3.3 rehash3.4 渐进式rehas.原创 2021-05-23 14:26:04 · 237 阅读 · 0 评论 -
Redis设计与实现读书笔记二、单机数据库的实现
文章目录二、单机数据库的实现1、数据库1.1 服务器中的数据库1.2 切换数据库1.3 数据库键空间1.3.1 添加新键1.3.2 删除键1.3.3 更新键1.3.4 对键取值1.3.5 其他键空间操作1.4 设置键的生存时间或过期时间1.4.1 设置过期时间1.4.2 保存过期时间1.4.3 移除过期时间1.4.4 计算并返回剩余生存时间1.4.5 过期键的判定1.5 过期键删除策略1.5.1 定时删除1.5.2 惰性删除1.5.3 定期删除1.6 Redis的过期键删除策略1.6.1 惰性删除策略的实.原创 2021-05-23 19:52:51 · 120 阅读 · 0 评论 -
Redis设计与实现读书笔记三、Redis的持久化机制
文章目录一、RDB持久化1、RDB文件的创建与载入1.1 SAVE命令执行时的服务器状态1.2 BGSAVE命令执行时的服务器状态1.3 RDB文件载入时的服务器状态2、自动间隔性保存2.1 设置保存条件2.2 dirty计数器和lastsave属性2.3 检查保存条件是否满足3、RDB文件结构3.1 databases部分3.2 key_value_pairs部分3.3 value的编码4、重点回顾二、AOF持久化1、AOF持久化的实现1.1 命令追加1.2 AOF文件的写入与同步2、AOF文件的载入与.原创 2021-05-24 12:02:34 · 148 阅读 · 0 评论 -
Redis设计与实现读书笔记四、Redis客户端和服务器
文章目录一、客户端1、客户端属性1.1 套接字描述符1.2 名字1.3 标志1.4 输入缓冲区1.5 命令与命令参数1.6 命令的实现函数1.7 输出缓冲区1.8 身份验证1.9 时间2、客户端的创建与关闭2.1 创建普通客户端2.2 关闭普通客户端2.3 Lua脚本的伪客户端2.4 AOF文件的伪客户端3、重点回顾二、服务器1、命令请求的执行过程1.1 发送命令请求1.2 读取命令请求1.3 命令执行器(1):查找命令实现1.4 命令执行器(2):执行预备操作1.5 命令执行器(3):调用命令的实现函数.原创 2021-05-24 18:19:01 · 174 阅读 · 0 评论 -
Redis设计与实现读书笔记五、Redis主从复制
文章目录一、主从复制1、旧版复制功能的实现1.1 同步1.2 命令传播2、旧版复制功能的缺陷3、新版复制功能的实现4、部分重同步的实现4.1 复制偏移量4.2 复制积压缓冲区4.3 服务器运行ID5、PSYNC命令的实现6、复制的实现6.1 步骤1:设置主服务器的地址和端口6.2 步骤2:建立套接字连接6.3 步骤3:发送PING命令6.4 步骤4:身份验证6.5 步骤5:发送端口信息6.6 步骤6:同步6.7 步骤7:命令传播7、心跳检测7.1、检测主从服务器的网络连接状态7.2 辅助实现min-sla.原创 2021-05-24 21:19:28 · 119 阅读 · 0 评论 -
Redis设计与实现读书笔记六、哨兵Sentinel的实现原理
文章目录一、哨兵Sentinel1、启动并初始化Sentinel1.1 初始化服务器1.2 使用Sentinel专用代码1.3 初始化Sentinel状态1.4 初始化Sentinel状态的masters属性1.5 创建连向主服务器的网络连接2、获取主服务器信息3、获取从服务器信息4、向主服务器和从服务器发送信息5、接收来自主服务器和从服务器的频道信息5.1 更新sentinels字典5.2 创建连向其他Sentinel的命令连接6、检测主观下线状态7、检查客观下线状态7.1 发送SENTINEL is-.原创 2021-05-25 10:47:52 · 118 阅读 · 0 评论 -
Redis设计与实现读书笔记七、发布、订阅和事务的原理
文章目录一、发布与订阅1、频道的订阅与退订1.1 订阅频道1.2 退订频道2、模式的订阅与退订2.1 订阅模式2.2 退订模式3、发送消息3.1 将消息发送给频道订阅者3.2 将消息发送给模式订阅者4、查看订阅信息4.1 PUBSUB CHANNELS4.2 PUBSUB NUMSUB4.3 PUBSUB NUMPAT5、重点回顾二、事务1、事务的实现1.1 事务开始1.2 命令入队1.3 事务队列1.4 执行事务2、WATCH命令的实现2.1 使用WATCH命令监视数据库键2.2 监视机制的触发2.3 .翻译 2021-05-26 15:26:46 · 88 阅读 · 0 评论 -
Redis设计与实现读书笔记八、Lua脚本的实现原理
文章目录一、Lua脚本1、创建并修改Lua环境2、Lua环境协作组件2.1 伪客户端2.2 lua_scripts字典3、EVAL命令的实现3.1 定义脚本函数3.2 将脚本保存到lua_scripts字典3.3 执行脚本函数4、EVALSHA命令的实现5、脚本管理命令的实现5.1 SCRIPT FLUSH5.2 SCRIPT EXISTS5.3 SCRIPT LOAD5.4 SCRIPT KILL6、脚本复制6.1 复制EVAL命令、SCRIPT FLUSH命令和SCRIPT LOAD命令6.2 复制E.原创 2021-05-26 15:29:37 · 285 阅读 · 0 评论 -
Redis设计与实现读书笔记九、二进制位数组和慢查询日志
文章目录一、二进制位数组1、位数组的表示2、GETBIT命令的实现3、SETBIT命令的实现3.1 带扩展操作的SETBIT命令示例4、BITCOUNT命令的实现5、BITOP命令的实现6、重点回顾二、慢查询日志1、慢查询记录的保存2、慢查询日志的阅览和删除3、添加新日志4、重点回顾三、监视器1、成为监视器2、向监视器发送命令信息3、重点回顾一、二进制位数组Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个命令用于处理二进制位数组(bit array,又称“位数组”)。其中.原创 2021-05-26 15:31:21 · 131 阅读 · 0 评论