跳到主要内容
版本:Next

Redis 核心知识

Redis 是内存型 NoSQL 数据库,企业中最常用作缓存。本篇覆盖核心特性、持久化机制、业务场景、缓存三大问题、集群模式,最后附 6 道高频面试题详解。

1. Redis 是什么​

Redis 是内存型 NoSQL 数据库,数据优先存储在内存中,企业最常用作缓存,也可承担其他轻量业务场景。

2. 核心特性​

  1. 内存存储:数据优先放内存,读写性能极高(10 万级 QPS);
  2. 多种数据结构:String、Hash、List、Set、ZSet,应对不同业务形态;
  3. 单线程处理命令请求:避免多线程锁竞争,没有上下文切换开销;
  4. 支持持久化:RDB / AOF,防止服务重启后数据全部丢失。

3. 两种持久化机制(高频)​

对比项RDBAOF
原理快照:按配置定时把内存全量数据写成磁盘文件追加日志:记录每一条写操作命令
优点文件紧凑、恢复速度快数据安全性更高(丢失窗口小)
缺点两次快照之间的数据有丢失风险日志文件体积更大、恢复速度慢于 RDB
生产建议—一般 RDB + AOF 同时开启,兼顾恢复速度与安全性

答题模板: RDB 是定时全量快照,恢复快但可能丢两次快照之间的数据;AOF 记录每条写命令,更安全但文件大、恢复慢;生产通常两者同时开。

4. 典型业务场景​

  • 热点数据缓存:减轻 MySQL 查询压力(最核心场景);
  • 登录会话 session 共享:多台应用服务器共享登录态;
  • 验证码、临时票据存储:天然适合设置过期时间;
  • 访问量计数器:INCR 原子自增;
  • 分布式锁:解决多实例并发抢占资源;
  • 限流:结合过期时间实现简单限流。

5. 缓存三大问题(必背概念)​

问题定义一句话理解
缓存穿透查询不存在的数据,缓存和数据库都没有,请求直接打到数据库「查永远不存在的 id」
缓存击穿热点 key 过期瞬间,大量并发请求同时涌入数据库「一个热 key 失效」
缓存雪崩大量 key 同时过期(或 Redis 宕机),数据库压力骤增「一堆 key 集体失效」

加分项(了解方向):穿透可用布隆过滤器 / 缓存空值;击穿可用互斥锁 / 热点永不过期;雪崩可用过期时间加随机值 / 集群高可用。

6. 集群模式(简单了解)​

模式解决的问题
主从复制主节点负责写入,从节点同步数据并提供读服务——读写分离 + 数据冗余
哨兵 Sentinel监控主从节点,主节点故障自动选主、故障转移——高可用
Redis Cluster数据分片存储到多个节点,支持横向扩容——容量与写扩展

三者的递进关系:主从解决「读扩展」,哨兵解决「自动故障切换」,Cluster 解决「数据量太大单机存不下」。

7. 生产使用注意点​

  • 不要把 Redis 当数据库长期存放核心业务数据(内存贵、持久化不是强可靠);
  • 公网不能直接暴露端口(6379 是挖矿病毒重灾区);
  • 必须设置访问密码(requirepass);
  • 控制 key 过期策略,设置合理的内存淘汰策略,避免内存占满。

8. Redis 面试题精讲(6 题)​

1. Redis 为什么读写速度很快?​

答: ① 数据存储在内存中,读写速度远超磁盘数据库;② 单线程处理命令,避免了多线程的锁竞争和上下文切换开销;③ 使用 I/O 多路复用(epoll)模型,单线程也能高效处理大量并发连接;④ 数据结构(哈希表、跳表等)针对内存操作高度优化。

2. RDB 和 AOF 两种持久化方式,优缺点对比?生产一般怎么做?​

答: RDB 是定时全量快照:文件紧凑、恢复快,但两次快照之间的数据有丢失风险;AOF 记录每条写命令:数据安全性更高,但文件体积大、恢复慢。生产环境一般 RDB + AOF 同时开启,用 AOF 保证数据尽量不丢、用 RDB 加快恢复速度。

3. 什么是缓存穿透、缓存击穿、缓存雪崩?​

答: 三者都是「请求绕过缓存打到数据库」的问题,区别在于原因:穿透是查询数据库中根本不存在的数据,缓存永远无法命中,请求全部落到数据库;击穿是某个热点 key 过期的瞬间,大量并发请求同时去数据库查;雪崩是大量 key 同时过期(或 Redis 整体宕机),数据库压力骤增甚至被打垮。

4. Redis 主从、哨兵、Cluster 集群分别解决什么问题?​

答: 主从复制解决读扩展与数据冗余(主写从读);哨兵解决高可用——监控主从节点,主节点故障时自动选举新主、完成故障转移;Cluster 解决单机容量瓶颈——把数据按槽分片存储到多个节点,支持横向扩容,同时内置了主从和故障转移。

5. Redis 适合哪些业务场景?不适合什么场景?​

答: 适合:热点数据缓存、session 共享、验证码/临时票据、计数器、分布式锁、限流——共同特征是读写频繁、允许少量丢失、数据量可控。不适合:作为持久化的核心业务数据存储(如金融账务),因为内存成本高、持久化不保证强可靠,这类数据应该放 MySQL。

6. Redis 是单线程,是不是代表不能利用多核 CPU?​

答: 单线程指的是命令执行用单线程完成,确实用不上多核。但:① Redis 的瓶颈通常在内存和网络而非 CPU,单线程已足够快;② 实践中通过一台机器部署多个 Redis 实例(或集群分片)让不同实例跑在不同核心上来利用多核;③ Redis 6.0 引入了多线程 I/O(网络读写多线程,命令执行仍是单线程)。所以「单线程」不等于「不能利用多核」。

本篇速记​

  • 快 = 内存 + 单线程无锁竞争 + epoll 多路复用。
  • RDB 快照恢复快、AOF 日志更安全,生产两个都开。
  • 穿透 = 查不存在的数据;击穿 = 热点 key 过期;雪崩 = 大量 key 同时过期。
  • 主从管读、哨兵管高可用、Cluster 管容量分片。
  • 核心数据放 MySQL,Redis 只做缓存和轻量场景;上线必设密码、不暴露公网。