Redis基础 | 初识Redis

88 阅读4分钟

思维导图:www.processon.com/view/link/6…

早些年在 3 .0 版本时代用过Redis,不过当时部署了几套Redis Cluster之后基本上也没出现过问题,也没有进一步深入去学习。最近想系统化的深入学习Redis。这是学习笔记的开篇,学习路径与思维导图中的Sheet页一致:

  • Redis 基础:
  • 命令详解:
  • 最佳实践:
  • 参数解析:
  • 源码解析:
  • 经典面试:

这一篇是Redis基础篇,主要对Redis做了一次扫盲,后面会补上Redis相关的问题。科普类文章网上非常多,主要想通过知识扫盲+自提问的方式巩固知识。

  1. 为什么 Redis 这么快?
  2. Redis 中的单线程是指什么?所有动作都是单线程么?
  3. Redis 底层数据结构都有哪些?底层数据结构与Redis 数据类型的关系是什么?
  4. Redis 的键值对是如何存储的?
  5. 哈希查找的时间复杂度是O(1),但是他会存在什么问题?Redis中的Rehash解决什么问题?同时会带来什么一影响?
  6. 整数数组和压缩列表在查找时间复杂度方面并没有很大的优势,那为什么 Redis 还会把它们作为底层数据结构呢?

  1. 哪些动作是异步完成,哪些动作是主线程完成的?
  2. 多线程就一定比单线程快么?存在的问题是什么?
  3. 网络IO机制中的多路复用是什么?为什么可以使“单线程的Redis”这么快?

  1. Redis如何避免数据丢失?
  2. AOF 机制是先写日志还是先执行命令?有什么好处和坏处?
  3. AOF 的写入是在主线程完成的么?
  4. AOF 的三种写回策略分别是什么?
  5. AOF 重写机制是什么?是由主线程写入的么?会阻塞主线程么?
  6. Fork + COW 真的不会阻塞主线程么?

  1. 生成 RDS 会阻塞主线程么?
  2. Redis进程绑定CPU核对RDB和AOF机制有影响么?

  1. Redis 主从同步原理及过程是怎样的?
  2. replication buffer 和 repl_backlog_buffer是什么?有什么区别?

  1. 哨兵机制是什么样的?
  2. 哨兵是如何监控Redis主从的?
  3. 主观下线和客观下线的区别是什么?
  4. 哨兵如何在多个从库中选主?逻辑是什么?
  5. 能做到无感知切换么?代价是什么?

  1. 部署哨兵时只需要填写主库IP,那哨兵集群之间是如何通信的?集群节点是知道彼此的信息的?
  2. 哨兵需要跟从库建立连接么?怎么做的呢?
  3. 客户端可以感知哨兵的监控、选主、切换过程么?
  4. Redis主从故障时如何确定由哪个哨兵节点执行选主?
  5. 部署2节点的哨兵集群时、有个哨兵节点挂了还可以对Redis选主切换么?

  1. 纵横扩容和横向扩容的优缺点是什么?
  2. 数据切片和实例如何对应?
  3. 客户端如何定位数据?如何知道需要的数据在哪个切片中?
  4. 访问的数据不在某个节点,正在节点之间迁移中怎么办?
  5. 为什么要设计哈希槽(Slot)?

  1. 万金油String存储数据有什么优缺点?一般建议在哪些场景下使用?
  2. String类型是具体怎么保存数据的?越详细越好。
  3. int编码和SDS指什么?
  4. 除了SDS的元数据存储开销以外,还有其他元数据存储开销么?
  5. RedisObject针对Int编码和SDS类型的数据存储有做什么优化么?embstr 编码、raw编码是什么?
  6. 压缩列表为什么可以节省内存?
  7. 如何用集合类型保存单值的键值对?
  8. Hash类型底层结构,什么时候使用压缩列表,什么时候使用hash表?有什么参数可以控制么?

问题持续更新。。。2025年5月18日

参考:《Redis 核心技术与实战》