第1-7章:数据结构
笔记:https://blog.csdn.net/qq_41157876/article/details/108875869
数据结构
- 简单动态字符串(SDS)
- 优点:O(1)获取长度;空间预分配,惰性空间释放
- 链表
- 字典
- 渐进式rehash
- 跳跃表
- 整数集合
- 升级
- 压缩列表
- 连锁更新带来的问题
第8章:对象
笔记:https://blog.csdn.net/qq_41157876/article/details/108878853
五种对象
- string(int + embstr sds+ raw sds)
- list(ziplist + linkedlist)
- hash(ziplist + dictht)
- set(intset + dictht)
- zset(ziplist + (skiplist+dictht))
redisObject
第8章(2):其他
笔记:https://blog.csdn.net/qq_41157876/article/details/108891475
多态实现
内存回收
内存共享
空转时长
常用命令
第9章:数据库
笔记:https://blog.csdn.net/qq_41157876/article/details/108892815
- 服务器
- RedisServer
- RedisClient
- 数据库
- RedisDb(KV键值对 + 过期字典)
- 读写时的其他维护操作
- 过期时间
- 命令
- 两种过期策略
- 淘汰策略
- 持久化对过期键的处理
- 写入RDB,载入RDB,写入AOF,重写AOF,复制
第10,11章:RDB和AOF持久化
笔记:https://blog.csdn.net/qq_41157876/article/details/108906695
- RDB
- 命令
- SAVE
- BGSAVE
- BASAVE的自动定时保存
- save配置
- 执行原理:RedisServer中的saveparams,dirty,lastsave属性
- RDB文件结构
- AOF
- AOF与RDB区别
- AOF实现原理(三个写入策略)
- AOF载入
- AOF重写
- AOF后台重写
第12章:Redis单线程模型
笔记:https://blog.csdn.net/qq_41157876/article/details/113886351
- 文件事件(Redis线程模型)
- Reactor模型
- 四个组件
- sockets:READABLE和WRITABLE
- I/O多路复用:epoll,select,poll
- dispatcher
- handler:连接,接受命令,回复
- 运行机制
- 时间事件
- 总体执行流程
- 模型优势(高效原因)
- 参考:epoll, select, poll
第13,14章:redisClient + redisServer + 交互过程 + serverCron函数
笔记:https://blog.csdn.net/qq_41157876/article/details/108914410
- redisClient
- 结构
- 创建与关闭
- 伪客户端
- redisServer
- 结构
- 初始化
- Client和Server交互过程
- serverCron时间事件函数(12件事)
第15章:复制
笔记:https://blog.csdn.net/qq_41157876/article/details/108970108
复制
- 完整重同步
- 部分重同步
部分重同步的实现
- 复制偏移量
- 复制积压缓冲区
- 服务器运行ID
PSYNC的过程
- 建立连接和同步判断(完整/部分)
- 复制数据
复制(建立连接 + 身份验证 + PSYNC + 数据同步)
建立连接后的心跳检测
- 每秒发送命令
- 三个作用(检测网络状态,min-slaves配置,检测命令丢失)
第16章:哨兵机制
笔记:https://blog.csdn.net/qq_41157876/article/details/113945501
- 概述
- 启动和初始化
- conf配置和启动命令
- 启动流程
- 不执行AOD和RDB,Sentinel专用代码
- sentinelState结构体
- sentinelRedisInstance结构体,记录监视的主从服务器
- 订阅 + 命令连接
- Sentinel与主从服务器的交互
- Sentinel如何初始化 主服务器 信息
- Sentinel如何初始化 从服务器 信息
- Sentinel向 订阅频道发送信息
- Sentinel如何初始化 其他Sentinel 信息
- 总结
- 下线判断和故障修复
- 下线判断
- 主观检测
- 客观检测
- raft算法——选举领头sentinel
- 故障修复
- 选出新master
- 更改其他slaves的复制目标
- 将旧master修改为slave
第17章:集群
笔记:https://blog.csdn.net/qq_41157876/article/details/113985840
- 概述
- 节点和集群
- 命令(conf + 握手 + 查看)
- 数据结构
- clusterState
- clusterNode
- clusterLink
- 槽(slot)和分片
- 概述
- 命令
- 结构(clusterState.slots[] 和 clusterNode.slots[])
- 自动转发操作机制(MOVED错误)
- hash分配 - CRC16
- 跳跃表
- slot重新分片
- redis-trib 重新分片原理
- ASK错误(cf MOVED错误)
- 复制和故障转移
- 消息
其他:Redis实现分布式锁
笔记:https://blog.csdn.net/qq_41157876/article/details/115460197
分布式锁
- 基于数据库实现分布式锁
- 基于缓存Redis实现分布式锁
- Redisson
- 基于Zookeeper实现分布式锁
其他:Redis使用场景
笔记:
其他:缓存穿透 / 雪崩 / 击穿
笔记:https://blog.csdn.net/qq_41157876/article/details/114024560
- 缓存穿透
- BloomFilter
- 缓存雪崩
- 缓存击穿
- 布隆过滤器