Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?
发布于 2024-07-17
658
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
springboot葵花宝典
扫码关注公众号
扫码阅读
手机扫码阅读
Redis 的持久化方式概述
Redis 提供了两种数据持久化方式:
- RDB(Redis Database Backup file)
- AOF(Append Only File)
1. RDB
RDB 是 Redis 数据快照,将内存中的所有数据记录到磁盘。当 Redis 实例故障重启时,可以通过读取快照文件恢复数据。
1.1 RDB 执行持久化的情况
- 执行
save命令:主进程执行,阻塞所有命令。 - 执行
bgsave命令:通过子进程执行,避免主进程阻塞。 - Redis 停机时默认执行一次
save。 - 触发 Redis 内部机制的 RDB 条件,可通过
redis.conf配置。
1.2 RDB 的工作原理
RDB 通过子进程的 fork 操作共享主进程数据,采用写时复制技术(Copy-on-Write)。此过程会记录快照数据到磁盘。
1.3 RDB 的缺点
- 两次快照间可能丢失数据。
- 子进程的
fork和文件写入过程较耗时。
2. AOF
AOF 是命令日志文件,记录 Redis 每个执行的写命令,用于恢复数据时重新执行命令。
2.1 AOF 配置及刷盘策略
通过 redis.conf 文件配置 AOF 功能及刷盘频率:
always: 每次写命令后立即记录,可靠性高但性能影响大。everysec: 默认方案,每秒记录一次,性能和可靠性较平衡。no: 由操作系统决定记录时间,性能最好但可能丢失大量数据。
2.2 AOF 文件重写
由于 AOF 文件体积较大,可通过 bgrewriteaof 命令进行重写,减少冗余命令记录。触发条件可通过配置文件设置。
3. RDB 和 AOF 的优缺点对比
| 特点 | RDB | AOF |
|---|---|---|
| 持久化方式 | 定时快照 | 记录命令 |
| 数据完整性 | 可能丢失两次备份间数据 | 数据较完整,取决于刷盘策略 |
| 文件大小 | 压缩后较小 | 较大 |
| 宕机恢复速度 | 较快 | 较慢 |
| 系统资源占用 | 较高 | 主要占用磁盘 IO,重写时消耗较大 |
| 使用场景 | 可容忍数据丢失,追求启动速度 | 对数据安全性要求高 |
4. 生产使用建议
在生产环境中,建议同时开启 RDB 和 AOF。AOF 用于保证数据完整性,RDB 用于快速恢复和作为冷备。两者结合使用,可以更好地应对数据丢失和恢复速度问题。
springboot葵花宝典
springboot葵花宝典
扫码关注公众号
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
查看方案
springboot葵花宝典的其他文章
IDEA的降龙八掌,牛批了!!
IDEA的降龙八掌,牛批了!!
SpringBoot-6-MyBatis-Plus:告别繁琐,轻松上手快速入门和高级查询
MyBatis-Plus+Lambda:告别繁琐,轻松上手快速入门和高级查询
SpringBoot-15-Spring-Data-Jpa的使用
SpringBoot-15-Spring-Data-Jpa的使用Spring Data Jpa 介绍 什么是
MySQL存储引擎解析:选择正确引擎,优化数据库性能
MySQL是世界上最流行的开源关系型数据库管理系统之一。MySQL的不同存储引擎,包括InnoDB、MyISAM、Memory、和更多,以及如何选择正确的引擎来优化数据库性能
SpringBoot-27- @Async实现异步调用
什么是异步调用
SpringBoot-27- @Async实现异步调用
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线