Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?
发布于 2024-07-17
592
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
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葵花宝典的其他文章
什么是类加载器?什么是双亲委派模型?
什么是类加载器?什么是双亲委派模型?
MyBatis批量插入数据优化,那叫一个优雅!
MyBatis批量插入数据优化,那叫一个优雅!
Spring-1-透彻理解Spring XML的必备知识
Spring:Spring是一个开源的Java应用程序开发框架,提供了丰富的功能和组件来简化企业级应用程序的开发。Spring框架包括多个模块,如核心容器、数据访问、Web开发、AOP等,各个模块可按需引入和使用。
Nacos 注册中心:微服务架构的不二选择
在当今的软件开发领域,微服务架构已经成为构建高可扩展性和灵活性系统的首选方案。而作为微服务架构中重要的一环,服务注册中心扮演着关键的角色。在众多选择中,Nacos 注册中心凭借其强大的功能和便捷性,成为了业界爆款。
SpringBoot实现全局异常处理总结
今天主要讲解了@ControllerAdvice+@ExceptionHandler进行统一的在Controller层上的全局异常处理
加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线
白皮书上线