004-Redis 持久化

Redis 持久化

Redis 提供了两种主要的持久化方式:RDBAOF

一、RDB 持久化

RDB(Redis Database Backup file)‌是通过快照(内存中数据在某一时刻的状态记录)的方式将内存中的数据以二进制格式保存到磁盘上。

1.优点:
  • 数据恢复速度快‌:在需要恢复大量数据时,RDB 的恢复速度通常比 AOF 快。
  • 文件体积小‌:由于数据以二进制格式压缩存储,RDB 文件通常比 AOF 文件小。
  • 性能影响小‌:使用 bgsave 命令进行持久化时,主进程不会阻塞,性能影响较小。
2.缺点:
  • 数据丢失风险‌:由于 RDB 是定时快照,两次快照之间的数据变动可能会丢失。
  • 资源消耗‌:在执行 bgsave 时,需要创建子进程,这可能会消耗较多的内存和CPU资源。
3.实现方式:

RDB 通过定时执行 bgsave 命令来创建快照。

快照过程是通过创建一个子进程来完成的,子进程复制主进程的内存数据并写入RDB文件。

这种方式利用了写时复制技术,确保主进程不会被阻塞。‌

二、AOF 持久化

‌AOF(Append Only File)‌通过记录每次写操作命令的方式来实现持久化。

1.优点:
  • 数据完整性高‌:由于记录了每次写操作,AOF 文件可以提供更高的数据完整性。
  • 灵活性高‌:可以通过配置不同的同步策略来平衡性能和数据的完整性。
2.缺点:
  • 文件体积大‌:由于记录了每次写操作,AOF 文件通常比 RDB 文件大。
  • 性能影响‌:在写入磁盘时可能会影响性能,尤其是在高负载情况下。
3.实现方式:

AOF 通过记录每次写操作命令来实现持久化。

可以通过配置不同的 appendfsync 选项来控制命令写入磁盘的频率,从而平衡性能和数据完整性。

4.重写机制

AOF 文件的大小达到某个阈值时,会将其中指令进行压缩。(如果有对于某个key多次的变更指令,则仅保留最新的数据指令)。

5.重写流程:
  • 手动执行 bgrewriteaof 命令触发重写,判断是否当前有 bgfsavebgrewriteaof 在运行,如果有,则等待该命令结束后再继续执行;
  • 主进程 fork 出子进程执行重写操作,保证主进程不会阻塞;
  • 子进程遍历 redis 内存中的数据到临时文件,客户端的写请求同时写入 aof_buf 缓冲区和aof_rewrite_buf 重写缓冲区保证原 AOF 文件完整性以及新 AOF 文件生成期间的新的数据修改动作不会丢失
  • 子进程写完新的 AOF 文件后,向主进程发送信号,父进程更新统计信息
  • 主进程把 aof_rewrite_buf 中的数据写入到新的 AOF 文件
  • 使用新的 AOF 文件覆盖旧的 AOF 文件,完成 AOF 重写

参考:https://blog.csdn.net/Zyw907155124/article/details/135404474

相关推荐
朴拙数科28 分钟前
mysql报错解决 `1525 - Incorrect DATETIME value: ‘0000-00-00 00:00:00‘`
android·数据库·mysql
confident31 小时前
hibernate 配置 二级 缓存
java·缓存·hibernate
weixin_425878231 小时前
Nginx 缓存那些事儿:原理、配置和最佳实践
运维·nginx·缓存
索然无味io1 小时前
SQL注入--Access注入
数据库·笔记·sql·学习·mysql·网络安全
寂然如故1 小时前
单片机的选择因素
数据库·mongodb
Light602 小时前
从混沌到清晰:全面解析非结构化数据治理!
数据库·数据挖掘·数据安全·数据资产·非结构化数据
我们的五年2 小时前
【Linux课程学习】:第20弹---信号入门专题(基础部分)
linux·服务器·后端·学习·缓存
浩浩测试一下2 小时前
渗透测试之SQLMAP工具详解 kali自带SQLmap解释 重点sqlmap --tamper 使用方式详解 搞完你就很nice了
数据库·安全·web安全·网络安全·系统安全·安全架构
数据的世界012 小时前
SQL中的分组数据
数据库·sql
Json_181790144803 小时前
API接口示例:电商商品评论数据
服务器·前端·数据库