Redis 核心知识
Redis 是内存型 NoSQL 数据库,企业中最常用作缓存。本篇覆盖核心特性、持久化机制、业务场景、缓存三大问题、集群模式,最后附 6 道高频面试题详解。
1. Redis 是什么
Redis 是内存型 NoSQL 数据库,数据优先存储在内存中,企业最常用作缓存,也可承担其他轻量业务场景。
2. 核心特性
- 内存存储:数据优先放内存,读写性能极高(10 万级 QPS);
- 多种数据结构:String、Hash、List、Set、ZSet,应对不同业务形态;
- 单线程处理命令请求:避免多线程锁竞争,没有上下文切换开销;
- 支持持久化:RDB / AOF,防止服务重启后数据全部丢失。
3. 两种持久化机制(高频)
| 对比项 | RDB | AOF |
|---|---|---|
| 原理 | 快照:按配置定时把内存全量数据写成磁盘文件 | 追加日志:记录每一条写操作命令 |
| 优点 | 文件紧凑、恢复速度快 | 数据安全性更高(丢失窗口小) |
| 缺点 | 两次快照之间的数据有丢失风险 | 日志文件体积更大、恢复速度慢于 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 只做缓存和轻量场景;上线必设密码、不暴露公网。