第3章:分布式缓存核心原理 —— Redis/Memcached 数据模型、淘汰策略、持久化机制
本章聚焦三大面试高频考点:数据模型差异、淘汰策略选型、持久化机制权衡。要求面试者不仅掌握概念,更能结合业务场景给出量化对比和选型建议。以下通过3个问答卡片+1个项目案例,拆解回答结构和加分要点。
核心差异一览
| 对比维度 | Redis | Memcached |
|---|---|---|
| 数据模型 | Key-Value + 5 种数据结构(String / Hash / List / Set / Sorted Set) | 纯 Key-Value,仅支持 String 类型 |
| Value 上限 | 512 MB | 1 MB |
| 淘汰策略 | 8 种(noeviction / volatile-lru/lfu/ttl/random / allkeys-lru/lfu/random) | 仅 LRU |
| 持久化 | RDB(快照) + AOF(日志)+ 混合持久化 | 无持久化 |
| 原子操作 | 事务 + Lua 脚本 | 单操作原子 |
| 内存管理 | 对象共享 + 内存碎片优化 | Slab Allocation |
| 适用场景 | 复杂数据结构、持久化需求、分布式锁、排行榜等 | 纯缓存场景,简单 KV 读取 |
📌 面试问题:请对比 Redis 和 Memcached 的数据模型,说明各自适用场景。
🎯 面试官考察点
- 对两种缓存核心差异的理解深度,是否停留在概念层面
- 数据结构敏感度——能否准确说出 Redis 的数据结构及对应场景
- 技术选型判断力——能否给出明确的场景化建议
📐 回答框架
- 开篇定性:一句话概括两者定位差异——Redis 是数据结构服务器,Memcached 是纯 KV 缓存
- 数据结构对比:列举 Redis 5 种数据结构 vs Memcached 仅 String,附带 Value 上限
- 核心能力对比:原子操作(事务/Lua vs 单操作)、内存管理(共享+碎片优化 vs Slab)
- 场景化收尾:复杂业务用 Redis,简单 KV 用 Memcached,给出明确建议
✏️ 示例回答
Redis 支持 String/Hash/List/Set/Sorted Set 五种结构,Value 上限 512MB,支持事务和 Lua 原子操作;Memcached 仅支持 String,Value 上限 1MB,单操作原子。Redis 通过对象共享和内存碎片优化内存,Memcached 采用 Slab Allocation。选型建议:复杂缓存、持久化场景用 Redis;简单 KV 缓存用 Memcached。
🔍 可能追问
- Redis 的 String 底层用了哪些编码方式?(int / embstr / raw)