外观
一句话答案
全量复制(RDB 快照)+ 增量复制(repl_backlog 缓冲区),从库重连时优先增量同步减少开销。
核心要点
当 Redis 内存达到 maxmemory 上限时,新写入操作触发淘汰:
| 策略 | 范围 | 淘汰规则 |
|---|---|---|
noeviction | — | 不淘汰,写入报错(默认) |
allkeys-lru | 所有 key | 淘汰最久未使用的 key(LRU) |
volatile-lru | 有过期时间的 key | 淘汰最久未使用的 key |
allkeys-random | 所有 key | 随机淘汰 |
volatile-random | 有过期时间的 key | 随机淘汰 |
volatile-ttl | 有过期时间的 key | 淘汰剩余 TTL 最短的 key |
allkeys-lfu | 所有 key | 淘汰访问频率最低的 key(LFU,Redis 4.0+) |
volatile-lfu | 有过期时间的 key | 淘汰访问频率最低的 key |
生产建议:
- 缓存场景(所有数据都是可重建的)→
allkeys-lru或allkeys-lfu - 混合场景(部分 key 不可丢失)→ 永久 key 不设过期时间,用
volatile-lru,保护永久 key
追问与易错
追问方向:
- 全量复制什么时候触发?
- repl_backlog 太小会怎样?
- 主从延迟大怎么排查?
易错点:
- ❌ 主从复制是同步的——默认异步
- ❌ 从库宕机不影响主库——配了 min-replicas 就会影响
💡 记忆锚点
主从复制 = 师傅带徒弟:首次拜师抄全本笔记(RDB全量同步),之后师傅每天发增量讲义(命令传播);徒弟走神回来看缓冲区补课(增量同步),缓冲区翻篇了只能重新抄全本(触发全量)。