背景
- 面试问题:Redis宕机后如何恢复数据。
- 面试官意图:考察对Redis持久化策略的了解和应用。
持久化的必要性
- Redis是内存数据库,宕机会导致数据丢失。
- 后端数据库恢复数据存在性能瓶颈,可能影响数据库稳定性。
持久化策略概览
- 官方支持四种持久化策略:RDB、AOF、RDB+AOF、无持久性。
RDB(Redis Database)
- 定义:通过快照形式保存数据集。
- 优点:恢复速度快,文件体积小。
- 缺点:实时性不足,fork操作成本高,文件不可读。
- 实现 :
save
命令阻塞主线程;bgsave
通过子进程写入,不影响性能。 - 配置 :通过
redis.conf
设置周期性快照条件。
AOF(Append Only File)
- 定义:记录每个写操作,用于重建数据集。
- 优点:数据丢失少,最多丢失一秒。
- 缺点:恢复速度慢,文件可能过大。
- 实现:先执行命令写入内存,再记录日志。
- 配置 :通过
redis.conf
开启和配置。
RDB + AOF
- 结合RDB和AOF的优点,提供更灵活的数据恢复方式。
无持久性
- 禁用持久化,数据丢失风险高,不推荐使用。
RDB详细说明
- 使用
bgsave
生成快照,利用Copy-On-Write(COW)技术保证快照完整性。 - 快照频率根据业务需求调整,避免频繁fork阻塞主线程。
AOF详细说明
- 提供三种写回策略:Always、Everysec、No。
- 根据性能和可靠性需求选择合适的写回策略。
AOF日志重写
- 减少日志文件大小,提高恢复效率。
- 由后台进程
bgrewriteaof
完成,不影响主线程。
RDB和AOF混合方式
- Redis 4.0引入,结合两者优点。
- 减少快照频率,避免频繁fork。
- AOF日志只记录两次快照间的操作,避免文件过大。
总结建议
- 数据不能丢失时,推荐使用RDB和AOF混合方式。
- 允许分钟级数据丢失,可只使用RDB。
- 使用AOF时,优先选择Everysec配置,平衡可靠性和性能。