思维导图:www.processon.com/view/link/6…
早些年在 3 .0 版本时代用过Redis,不过当时部署了几套Redis Cluster之后基本上也没出现过问题,也没有进一步深入去学习。最近想系统化的深入学习Redis。这是学习笔记的开篇,学习路径与思维导图中的Sheet页一致:
- Redis 基础:
- 命令详解:
- 最佳实践:
- 参数解析:
- 源码解析:
- 经典面试:
这一篇是Redis基础篇,主要对Redis做了一次扫盲,后面会补上Redis相关的问题。科普类文章网上非常多,主要想通过知识扫盲+自提问的方式巩固知识。
- 为什么 Redis 这么快?
- Redis 中的单线程是指什么?所有动作都是单线程么?
- Redis 底层数据结构都有哪些?底层数据结构与Redis 数据类型的关系是什么?
- Redis 的键值对是如何存储的?
- 哈希查找的时间复杂度是O(1),但是他会存在什么问题?Redis中的Rehash解决什么问题?同时会带来什么一影响?
- 整数数组和压缩列表在查找时间复杂度方面并没有很大的优势,那为什么 Redis 还会把它们作为底层数据结构呢?
- 哪些动作是异步完成,哪些动作是主线程完成的?
- 多线程就一定比单线程快么?存在的问题是什么?
- 网络IO机制中的多路复用是什么?为什么可以使“单线程的Redis”这么快?
- Redis如何避免数据丢失?
- AOF 机制是先写日志还是先执行命令?有什么好处和坏处?
- AOF 的写入是在主线程完成的么?
- AOF 的三种写回策略分别是什么?
- AOF 重写机制是什么?是由主线程写入的么?会阻塞主线程么?
- Fork + COW 真的不会阻塞主线程么?
- 生成 RDS 会阻塞主线程么?
- Redis进程绑定CPU核对RDB和AOF机制有影响么?
- Redis 主从同步原理及过程是怎样的?
- replication buffer 和 repl_backlog_buffer是什么?有什么区别?
- 哨兵机制是什么样的?
- 哨兵是如何监控Redis主从的?
- 主观下线和客观下线的区别是什么?
- 哨兵如何在多个从库中选主?逻辑是什么?
- 能做到无感知切换么?代价是什么?
- 部署哨兵时只需要填写主库IP,那哨兵集群之间是如何通信的?集群节点是知道彼此的信息的?
- 哨兵需要跟从库建立连接么?怎么做的呢?
- 客户端可以感知哨兵的监控、选主、切换过程么?
- Redis主从故障时如何确定由哪个哨兵节点执行选主?
- 部署2节点的哨兵集群时、有个哨兵节点挂了还可以对Redis选主切换么?
- 纵横扩容和横向扩容的优缺点是什么?
- 数据切片和实例如何对应?
- 客户端如何定位数据?如何知道需要的数据在哪个切片中?
- 访问的数据不在某个节点,正在节点之间迁移中怎么办?
- 为什么要设计哈希槽(Slot)?
- 万金油String存储数据有什么优缺点?一般建议在哪些场景下使用?
- String类型是具体怎么保存数据的?越详细越好。
- int编码和SDS指什么?
- 除了SDS的元数据存储开销以外,还有其他元数据存储开销么?
- RedisObject针对Int编码和SDS类型的数据存储有做什么优化么?embstr 编码、raw编码是什么?
- 压缩列表为什么可以节省内存?
- 如何用集合类型保存单值的键值对?
- Hash类型底层结构,什么时候使用压缩列表,什么时候使用hash表?有什么参数可以控制么?
问题持续更新。。。2025年5月18日
参考:《Redis 核心技术与实战》