信息技术大学
Redis 高可用
计算机基础面试八股 · 第 3 章 数据库(MySQL 与 Redis)
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
Redis 高可用
计算机基础面试八股 · 第 3 章 数据库(MySQL 与 Redis)
RDB 与 AOF 持久化
一份快照一份流水:RDB 恢复快但可能丢段,AOF 更完整但文件大恢复慢。
RDB
定时全量快照,二进制紧凑,恢复最快
AOF
追加写命令流水,可配秒级刷盘
AOF 重写
流水压实成最小命令集,控制文件膨胀
取舍
RDB 兜底恢复,AOF 保数据更全,可并用
主从复制与哨兵
主写从读,复制异步;哨兵盯着主节点,挂了自动投票选新主。
全量+增量
首次传 RDB 全量,之后同步命令流增量
异步复制
主不等从确认,主宕可能丢尾部数据
哨兵
监控、投票、自动故障转移三合一
集群与槽分片
数据按槽切片:16384 个槽分给各节点,客户端直连路由,水平扩展。
槽
key 按 CRC16 取模映射到 16384 槽之一
分片扩容
槽分布多节点,扩容即迁移部分槽
哈希标签
{tag} 强制同槽,支撑多 key 原子操作
过期删除与内存淘汰策略
过期靠惰性与定期双删,内存真满了按策略挑牺牲者:LRU/LFU/随机/TTL。
过期删除
惰性:访问时查;定期:抽样批量删
淘汰触发
达到 maxmemory 才启动淘汰
策略
默认 noeviction 拒写;LRU/LFU/随机/TTL 可选
本节要点
- ✓RDB 快照恢复快,AOF 完整但大
- ✓主从异步复制,哨兵自动切换
- ✓16384 槽分片,水平扩展
- ✓过期双删,满员按 LRU/LFU 淘汰
延伸主题:配一次主从加哨兵算算自己的内存水位
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1Redis 主从架构下为什么可能丢数据?
参考答案复制是异步的:主先写自己内存再同步给从,主宕机时尾部命令可能还没传到;哨兵提升新主后,旧主未复制的写入就永久丢了。可用 WAIT 等从确认换更强一致。
2AOF 秒级持久化也会丢数据,丢失窗口有多大?
参考答案取决于刷盘策略:always 每命令刷盘不丢但慢;everysec 每秒刷一次,最多丢约一秒;no 交给操作系统,窗口不可控。everysec 是性能与安全的默认折中。
3为什么 Redis 集群是 16384 个槽,而不是更多?
参考答案节点心跳要携带槽位图,16384 位约 2KB,足以精确标识分片又控制心跳体积;集群设计上限约 1000 节点,16384 槽绰绰有余,更多只是浪费带宽。