当前位置: 首页 > article >正文

Redis持久化机制

Redis做为内存型数据库,其性能有目共睹,但内存的特性问题,重启后数据就会清零,所以Redis提供了将数据保存至磁盘的持久化方案。

Redis持久化的方式

Redis提供三种持久化的方式:分别是RDB(Redis Database Snapshot)和AOF(Append Only File)以及混合持久化。

RDB

RDB持久化方式是Redis将当前内存中的数据快照(snapshot)保存到硬盘的过程。换句话说,Redis会创建一个代表某一时刻的数据集的磁盘文件。

RDB的工作原理
  • 触发RDB生成:可以通过执行SAVE或BGSAVE命令手动触发,也可以基于配置文件中的save指令自动触发。
  • 创建子进程:Redis主进程会执行fork操作来创建一个子进程,这个子进程会获得父进程内存中的数据副本。
  • 子进程生成RDB文件:子进程将遍历整个数据集,将所有的数据写入一个新的临时RDB文件。
  • RDB文件替换:子进程完成后,会替换掉旧的RDB文件,并通知父进程任务完成。
SAVE和BGSAVE的区别
  • SAVE命令是在Redis的主进程中执行,执行期间会产生堵塞,不能响应任何客户端的请求,导致服务中断,直至快照创建完成为止。
  • BGSAVE命令是异步执行,除了fork子进程时会有短暂堵塞(极短的时间)外,其余创建快照期间主进程可以正常处理请求,子进程会复制主进程的内存空间,创建快照过程中,服务器的内存使用量会暂时增加,期间新增的数据,会以AOF的方式继续保存下来。
  • 自动快照的方式默认采用BGSAVE命令
    #redis.conf中,使用save指令设置自动执行BGSAVE条件,例如:
    save  100 1       #如果在100秒内至少有1个Key被改变,执行BGSAVE
    
    #如果关闭自动快照,则如下设置:
    save ""
RDB的载入

当Redis重新启动时,如果配置为使用RDB持久化,它会查找RDB文件,并加载它。由于RDB文件是一个紧凑的二进制表示形式,数据加载非常快。

AOF

AOF持久化方式旨在持续地保存服务器上的所有修改操作。每当执行一个会改变数据的命令时,Redis都会将该命令写入AOF文件中。这样,当Redis需要恢复数据时,只需执行AOF文件中的命令就可以恢复到原来的状态。

AOF的工作原理
  • 命令追加:将Redis写操作命令追加到aof_buf缓冲区。
  • 文件写入:周期性地将aof_buf缓冲区的命令写入AOF文件的内核缓冲区。
  • 文件同步:根据配置同步策略,将AOF文件缓冲区的内容同步到磁盘。
AOF文件的载入

当Redis服务器启动时,如果配置为使用AOF持久化,它会检查AOF文件的存在。如果找到AOF文件,Redis会加载并执行其中的命令来恢复数据。

混合持久化

混合持久化是Redis 4.0新引入的持久化策略,结合了RDB的快速恢复和AOF的数据完整性的优点。它首先以RDB格式保存当前数据状态,然后继续以AOF格式记录新的写操作,确保数据完整性并优化恢复速度。

混合持久化的工作原理

在AOF重写之前,RDB和AOF都是按照它们各自的持久化策略工作的。当AOF重写被触发时,混合持久化才开始发挥作用:将当前的数据集会首先以RDB格式写入新AOF文件的顶部,然后再追加新的命令到文件的末尾。

总结

通过详细介绍RDB、AOF以及混合持久化这三种主流的持久化方法,我们不仅学习了它们各自的工作机制和配置策略,还探讨了它们的优缺点,然后根据自己的实际需求选出合适的持久化方式。

  • RDB:适合数据备份和灾难恢复场景。
  • AOF:适合对数据丢失有严格要求的应用。
  • 混合持久化:适合快速的数据恢复和高数据安全性的场景。

http://www.kler.cn/news/361395.html

相关文章:

  • 基于PERL语言的MS中CASTEP模块批量提交计算脚本
  • SpringBoot物流管理系统设计与实现
  • MATLAB代码优化
  • 【华为HCIP实战课程十七】OSPF的4类及5类LSA详解,网络工程师
  • 持续优化之路:Envoia许可证管理的轻松进阶
  • 操作系统学习笔记-1.1操作系统的基本概念
  • 深入理解InnoDB底层原理:从数据结构到逻辑架构
  • STM32烧写准备
  • 什么是感知与计算融合?
  • 在元学习中,**1-shot**、**5-shot**、和**10-shot**等术语常用于描述少样本学习中的训练条件。这些术语的具体含义是:
  • Python 函数详解
  • CLion远程开发Ubuntu,并显示helloworld文字框
  • 深度学习(二)框架与工具:开启智能未来之门(2/10)
  • 【计网笔记】物理层
  • 每天坚持学英语,多久能说流利呢?
  • 闯关leetcode——190. Reverse Bits
  • Github 2024-10-20 php开源项目日报Top10
  • 解锁文本数据可视化的无限可能:Wordcloud库全解析
  • 微服务接口测试的通用注意点
  • 【C++】string类(2)
  • Construmart借力SNP全面升级SAP S/4HANA和 SAP CAR 改进零售业务流程
  • Android 应用包名的定义 pm list packages查询的包名
  • SQL语句高级查询(适用于新手)
  • 这几次比赛题解
  • UniHttp框架直接对接第三方Http接口
  • JavaGuide (8)