4. 缓存与NoSQL面试:Redis数据结构、缓存穿透/击穿/雪崩、持久化策略、大厂实际场景
本章聚焦Redis核心知识点与大厂面试高频题。你将掌握:五种常见数据结构的选型、三大缓存异常(穿透/击穿/雪崩)的区分与解决方案、RDB/AOF持久化策略对比,以及如何在项目中合理运用缓存。
提示:面试官通常从“使用场景”切入,考察你能否结合业务选择合适的数据结构或缓存方案,而非死记硬背命令。
面试问答卡片
卡片1:Redis数据结构选型
| 面试问题 | 请列举Redis常用的5种数据结构,并说明各自适合什么业务场景。 |
| 面试官考察点 | 1. 是否真正用过Redis,而非背命令;2. 能否根据业务选择合适的数据结构;3. 对底层编码了解程度。 |
| 回答框架 | 分类说明:String(计数/缓存)、Hash(对象/用户信息)、List(消息队列/时间线)、Set(去重/标签)、ZSet(排行榜/延迟队列)。 |
| 简短示例回答 | String用于秒杀库存计数;Hash存储用户资料;ZSet实现阅读排行榜;List用作轻量队列;Set做用户标签交集计算。 |
| 可能追问 | 1. ZSet底层用的什么结构?(跳表+字典)2. 为什么大key会有性能问题?3. 你用HyperLogLog解决过什么场景? |
| 避坑提醒 | 不要只说“存字符串”,要体现你做过的真实场景。避免把List当无限队列用,注意内存膨胀。 |
卡片2:缓存穿透/击穿/雪崩
| 面试问题 | 请解释缓存穿透、缓存击穿、缓存雪崩的区别与解决方案。 |
| 面试官考察点 | 1. 对三个概念的清晰界定;2. 是否有实际治理经验;3. 能否区分使用场景。 |
| 回答框架 | 穿透:查不到的数据→布隆过滤 / 空值缓存。击穿:热点key过期→互斥锁 / 永不过期+异步更新。雪崩:大批key同时过期→均匀过期 / 多级缓存 / 限流降级。 |
| 简短示例回答 | 穿透:用户查询不存在的商品ID,布隆过滤拦截,QPS从10k降为0。击穿:首页推荐榜单,用锁重建缓存,只让一个线程查DB。雪崩:秒杀商品设置随机TTL,加本地缓存兜底。 |
| 可能追问 | 1. 布隆过滤器误判率怎么算?2. 互斥锁的性能开销?3. 本地缓存如何保证一致性? |
| 避坑提醒 | 不要混用三个概念(很多候选人说不清)。不要忘记讲“预防”而非仅“事后修复”。使用布隆过滤器时说明支持删除的变体(Counting Bloom Filter)。 |
卡片3:RDB与AOF持久化
| 面试问题 | Redis的RDB和AOF有什么区别?实际项目中如何选型? |
| 面试官考察点 | 1. 两类持久化原理理解;2. 对可靠性与性能平衡的判断;3. 混合持久化了解。 |
| 回答框架 | RDB:全量快照,恢复快但可能丢数据。AOF:追加日志,数据更安全但体积大。选型:允许分钟级丢失用RDB;要求秒级恢复用混合(Redis 4.0+)。 |
| 简短示例回答 | 我们用户会话数据使用RDB每5分钟快照,丢失可接受;订单支付流水用AOF everysec,配合混合持久化减少重启时间。 |
| 可能追问 | 1. AOF重写过程?2. RDB保存期间写操作阻塞吗?3. 你遇到过AOF文件损坏怎么修复? |
| 避坑提醒 | 不要只背“RDB快照、AOF日志”,要讲真实配置(save 900 1 等)。注意区分“主从同步”和“持久化”,面试时常被混淆。 |
项目案例:用户画像实时标签系统
| 项目名称 | 用户画像实时标签系统(Redis + Kafka) |
| 业务背景 | 电商平台需要实时更新用户行为标签(浏览、收藏、购买),支持页面个性化推荐和广告召回。 |
| 规模指标 | 日均用户日志约1亿条,实时标签数100+,Redis集群20个节点,峰值QPS 8万。 |
| 技术栈 | PHP + Redis(Hash/ZSet)+ Kafka + PHP-Redis扩展 + 本地缓存(APCu) |
| 核心难点 | 1. 每个用户标签可能存储几十个字段,Hash big key问题;2. 热key(秒杀场景)导致单节点崩溃;3. 数据一致性:消费Kafka可能重复或乱序。 |
| 面试高频追问 | 1. 怎么监控big key?2. 热key怎么发现的?3. 如何保证标签写入不丢?4. Redis和MySQL怎么保持最终一致? |
| 可迁移回答话术 | “在实时标签项目中,我们使用Hash存储用户标签,但发现大V用户字段超千个导致阻塞,改为ZSet分片存储。热key通过代码内嵌本地缓存+随机TTL解决。Kafka消费采用幂等写入+Redis乐观锁保证去重。这套方案同样适用于商品实时统计、活动排行榜等场景。” |
面试加分:提到内存淘汰策略(allkeys-lru)、pipeline批量操作、Redis Cluster集群预分片
注意:不要只讲理论,大厂面试官更关心你在真实业务中遇到的坑和解决思路。