redis面试高频问题汇总(一)
缓存面试高频问题汇总
在后端、分布式系统面试中,缓存相关问题频繁出现,核心围绕缓存的原理、问题解决、性能优化等。以下是高频考点整理:
一、基础概念类
1. 什么是缓存?为什么要用缓存?
- 缓存是数据交换的缓冲区,临时存储高频访问数据,减少对底层数据源(如数据库)的直接访问。
- 作用:降低延迟(内存读写比磁盘快)、减轻数据库压力、提高系统吞吐量。
2. 常见的缓存介质有哪些?各有什么特点? - 内存缓存(如Redis、Memcached):速度快,适合高频访问数据,但数据易失(需持久化)。
- 本地缓存(如Caffeine、Guava):进程内缓存,无网络开销,但分布式环境下一致性难保证。
- 磁盘缓存(如浏览器缓存、CDN):容量大、持久化,但速度较慢。
3. 缓存更新策略有哪些?各适用于什么场景? - Cache Aside(旁路缓存):先更数据库,再删缓存(避免脏读),适用于大多数场景。
- Write Through(写透):更新缓存同时同步更新数据库,一致性高但性能略低,适合读少写多场景。
- Write Back(写回):先更缓存,异步批量更新数据库,性能高但有数据丢失风险,适合高并发写场景(如内存数据库)。
二、缓存问题与解决方案类
- 缓存穿透、击穿、雪崩的区别与解决?(核心考点)
- 缓存穿透:请求数据在缓存和数据库都不存在,攻击数据库。
解决:缓存空值、布隆过滤器、接口参数校验。 - 缓存击穿:热点数据缓存失效,大量并发请求穿透到数据库。
解决:互斥锁(分布式锁)、热点数据永不过期、异步更新缓存。 - 缓存雪崩:大量缓存同时失效或缓存服务宕机,导致请求全量压向数据库。
解决:过期时间随机化、缓存集群(主从+哨兵)、熔断降级、多级缓存。
2. 缓存一致性问题如何解决?
- 核心矛盾:缓存与数据库数据不一致(如更新数据库后未更新缓存)。
- 方案:
- 优先使用删除缓存而非更新缓存(避免并发更新冲突)。
- 分布式场景下加锁(如Redis分布式锁)保证操作原子性。
- 对强一致性需求场景,可引入消息队列异步同步缓存。
3. 缓存和数据库双写不一致的原因及解决? - 原因:并发读写时,更新数据库和缓存的顺序差异导致数据偏差(如A更新数据库后,B更新缓存覆盖了正确值)。
- 解决:更新数据库后延迟删缓存(避免脏读)、加分布式锁确保单线程更新、使用Canal等工具监听binlog同步缓存。
三、Redis专项类
1. Redis为什么快?
- 基于内存操作,单线程模型避免线程切换开销,I/O多路复用(epoll)处理高并发连接,数据结构优化(如跳表、压缩列表)。
2. Redis的过期策略和内存淘汰机制有什么区别? - 过期策略:定期删除(每隔一段时间扫描过期key)+ 惰性删除(访问时才检查过期),避免过期key占用内存。
- 内存淘汰机制:当内存达到maxmemory时,删除部分数据的策略(如LRU最近最少使用、LFU最近最不频繁使用、随机删除等)。
3. Redis分布式锁的实现原理?如何避免死锁? - 原理:通过 SET key value NX EX 命令(原子性)获取锁,释放锁时用Lua脚本删除(避免误删他人锁)。
- 防死锁:设置锁过期时间、加锁时记录线程标识、定时续期(如Redisson的watch dog机制)。
四、性能优化类
1. 如何设计一个高可用的缓存系统?
- 多级缓存:本地缓存 + 分布式缓存(如先查Caffeine,再查Redis)。
- 缓存集群:主从复制(读写分离)、哨兵/集群模式(容灾)。
- 监控与告警:缓存命中率、内存使用率、响应时间等指标监控,异常时自动扩容或降级。
2. 缓存命中率低怎么办? - 分析原因:缓存粒度不合理(过大/过小)、过期时间设置不当、热点数据未缓存。
- 优化:调整缓存粒度(如缓存用户基本信息而非全量数据)、延长高频数据过期时间、预热热点数据。
3. 本地缓存和分布式缓存如何配合使用? - 本地缓存存超高频且变化少的数据(如配置信息),减少分布式缓存访问压力。
- 分布式缓存存跨服务共享数据(如用户会话),保证分布式一致性。
- 注意:本地缓存需避免数据 stale(可加过期时间或主动刷新)。
五、场景设计类
1. 设计一个秒杀系统的缓存方案?
- 核心:防止缓存雪崩(商品库存缓存过期随机化)、防击穿(热点商品锁+预加载)、限流削峰(Redis+Lua脚本原子扣减库存)。
2. 如何用缓存解决数据库读写分离的延迟问题? - 读请求优先查缓存,缓存未命中时:非热点数据查从库,热点数据查主库(避免从库延迟导致脏读),并更新缓存。
总结
缓存问题的核心是**“平衡性能、一致性、可用性”**,需结合业务场景(如读写频率、数据一致性要求)选择策略。面试中需不仅能描述概念,还要能分析问题根源,并给出具体解决方案(如代码思路、工具选型)。