前言
说到 Redis 相信对于我们这些程序员来说太熟悉了,Redis 凭借着自己超高的超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持,很快就在国内的互联网市场占据了一席之地,得到了广大用户的一致好评,随着国内外使用 Redis 的大中小型互联网公司越来越多,可以直接了当的说,现在 Redis 的了解和应用实践是后端中高级程序员必掌握的技能。
如果你是一个后端程序员,对 Redis 还是一知半解,不妨花一段时间看完这篇腾讯大佬手码的《redis 深度笔记》,读完说可以说对掌握 Redis 是肯定不可能的,但可以保证的是,对于你来说肯定收获颇丰。这篇《redis 深度笔记》的内容都是从实战中摸索总结的 Redis 最常用最核心知识点,当你所在公司系统的并发量达到一定的量级,你就会发现这份笔记稀有的高级功能能派上大用场
redis深度笔记(全彩版)
本小册主要讲解笔者从实战中摸索总结的Redis最常用最核心知识点,但限于篇幅和精力,并没有涵盖Redis 全部的内容知识点,比如Redis 内置的lua 脚本引擎就完全没有提到。之所以不讲,是因为在平时的工作中确实从来没有使用过,它就好比关系数据库的存储过程,虽然功能很强大,但是确实很少使用,而且也不易维护,所以就不推荐读者使用了。下面我们就从这基础、应用、原理、集群、拓展、源码等六个篇章来贯通这份redis深度笔记吧
以下提及到的所有的笔记内容、面试题、简历等资料,均可以在公众号【退休程序猿】自行货区
PART1:Redis 深度笔记开篇
1.Redis 可以用来做什么?
- 由 Redis 面试想到的
 - Redis 可以做什么?
 

2.Redis 基础数据结构
- Redis 安装
 - Redis 基础的数据结构
 - 容器型数据结构的通用规则
 - 关于 Redis 使用的一些思考
 

PART2:Redis 的应用总结
1.分布式锁
- 分布式锁
 - 超时问题
 - 可重入性
 

2.延时队列
- 异步消息队列?
 - 队列空了怎么办?
 - 队列延迟
 - 空闲连接自动断开
 - 锁冲突处理
 - 延时队列的实现
 - 进一步优化
 

3.位图
- 基本使用
 - 统计和查找
 - 魔术指令 bitfield
 

4.HyperLogLog
- 使用方法
 - pfadd 这个 pf 是什么意思?
 - pfmerge 适合什么场合用?
 - 注意事项
 - HyperLogLog 实现原理
 - pf 的内存占用为什么是 12k?
 

5.布隆过滤器
- 布隆过滤器是什么?
 - Redis 中的布隆过滤器
 - 布隆过滤器的基本使用
 - 注意事项
 - 布隆过滤器的原理
 - 空间占用估计
 - 实际元素超出时,误判率会怎样变化?
 - 用不上 Redis4.0 怎么办?
 - 布隆过滤器的其他应用
 

6.简单限流
- 如何使用 Redis 来实现简单限流策略?
 

7.漏斗限流
- Redis-Cell
 - 一些思考
 

8.GeoHash
- 用数据库来算附近的人
 - GeoHash 算法
 - Redis 的 Geo 指令基本使用
 

9.Scan
- scan 基础使用
 - 字典的结构
 - scan 遍历顺序
 - 字典扩容
 - 对比扩容缩容前后的遍历顺序
 - 渐进式 rehash
 - 更多的 scan 指令
 - 大 Key 扫描
 

PART3:Redis 的原理
1.线程 IO 模型
- 非阻塞 IO
 - 事件轮询(多路复用)
 - 指令队列
 - 响应队列
 - 定时任务
 

2.通信协议
- RESP(Redis Serialization Protocol)
 - 客户端->服务端
 - 服务端->客户端
 

3.持久化
- 快照原理
 - fork(多进程)
 - AOF 原理
 - AOF 重写
 - fsync
 - 运维
 - Redis4.0 混合持久化
 

4.管道
- Redis 的消息交互
 - 管道压力测试
 - 深入理解管道本质
 

5.事务
- Redis 事务的基本使用
 - 原子性
 - discard(丢弃)
 - 优化
 - Watch
 

6.PubSub
- 消息多播
 - PubSub
 - 模式订阅
 - 消息结构
 - PubSub 缺点
 

7.小对象压缩
- 32bit vs 64bit
 - 小对象压缩存储(ziplist)
 - 内存回收机制
 - 内存分配算法
 

8.主从同步
- CAP 原理
 - 最终一致
 - 主从同步
 - 增量同步
 - 快照同步
 - 增加从节点
 - 无盘复制
 - Wait 指令
 

PART4:Redis 集群
1.Sentinel
- 消息丢失
 - Sentinel 基本使用
 

2.Codis
- Codis 分片原理
 - 不同的 Codis 实例之间槽位关系如何同步?
 - 扩容
 - 自动均衡
 - Codis 的代价
 - Codis 的优点
 - MGET 指令的操作过程
 - 架构变迁
 - Codis 的尴尬
 - Codis 的后台管理
 

3.Cluster
- 槽位定位算法
 - 跳转
 - 迁移
 - 容错
 - 网络抖动
 - 可能下线(PFAIL-Possibly Fail)与确定下线(Fail)
 - Cluster 基本使用
 - 槽位迁移感知
 - 集群变更感知
 

PART5:Redis 拓展
1.Stream
- 消息 ID
 - 消息内容
 - 增删改查
 - 独立消费
 - 创建消费组
 - 消费
 - Stream 消息太多怎么办?
 - 消息如果忘记 ACK 会怎样?
 - PEL 如何避免消息丢失?
 - Stream 的高可用
 - 分区 Partition
 

2.指令
- Redis 每秒执行多少次指令?
 - Redis 连接了多少客户端?
 - Redisn 内存占用多大?
 - 复制积压缓存区多大?
 

3.再谈分布式锁
- Redlock 算法
 - Redlock 使用场景
 

4.过期策略
- 过期的 key 集合
 - 定时扫描策略
 - 从库的过期策略
 

5.LRU
- LRU 算法
 - 近似 LRU 算法
 

6.懒惰删除
- Redis 为什么要懒惰删除(lazy free)?
 - flush
 - 异步队列
 - AOF Sync 也很慢
 - 更多异步删除点
 

7.优雅地使用 Jedis
- 重试
 

8.保护 Redis
- 指令安全
 - 端口安全
 - Lua 脚本安全
 - SSL 代理
 

9.Redis 安全通信
- spiped 原理
 - spiped 使用入门
 

PART6:源码
1.探索字符串内部结构
- embstr vs raw
 - 扩容策略
 

2.探索字典内部
- dict 内部结构
 - 渐进式 rehash
 - 查找过程
 - hash 函数
 - hash 攻击
 - 扩容条件
 - 缩容条件
 - set 的结构
 

3.探索压缩列表内部
- 增加元素
 - 级联更新
 - IntSet 小整数集合
 

4.探索快速列表内部
- 每个 ziplist 存多少元素?
 - 压缩深度
 

5.探索跳跃列表内部结构
- 基本结构
 - 查找过程
 - 随机层数
 - 插入过程
 - 删除过程
 - 更新过程
 - 如果 score 值都一样呢?
 - 元素排名是怎么算出来的?
 

6.探索紧凑列表内部
- 级联更新
 - 取代 ziplist
 

7.探索基数树内部
- 应用
 - 结构
 - 增删节点
 
以下提及到的所有的笔记内容、面试题、简历等资料,均可以在公众号【退休程序猿】自行货区

最后
不管学习任何一门技术,都应该有个系统的学习!为什么一定要系统性学习?不管你是不是做 IT,其实都有系统性学习的必要。系统性的学习一个知识点,可以让我们在遇到问题时考虑得更加全面,这也是一个成熟的工程师应该具备的特征;碎片化的学习则很容易让我们得出一些片面的、甚至错误的结论。
然而,系统性学习需要耗费巨大的时间和精力,有的人可能会觉得不值得,就放弃了系统性学习,转而信仰复制粘贴改一下七字真言,一头扎进 CURD 的苦海。



















