Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?

发布于 2024-07-17
592

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读
Redis 持久化方式概述

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葵花宝典

主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目

273 篇文章
浏览 236.1K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线