一文读懂redis持久化机制

news/2025/2/21 23:34:15/

持久化官网相关参考资料
https://redis.io/docs/manual/persistence/

持久化就是把redis内存里面保存的数据保存磁盘中,在redis重启或者能够使得数据不会丢失。目前常用的持久化方式有:RDB方式、AOF方式以及RDB + AOF两种方式

RDB持久化方式

所谓的RDB方式就是通过fork子线程以快照的方式将redis当前内存中的数据写入到硬盘中。

RDB持久化的优点:生成的文件小,备份和恢复速度都很快
RDB持久化的缺点:1、经常需要fork子进程,所以占用CPU会比较高 2、只是进行定期的备份数据,容易造成数据丢失
可以通过dbfilename dump.rdb来指定rdb的文件名,可以通过dir ./ 来配置备份文件保存的路径。RDB保存的策略可以通过下面的配置项来进行配置:

# save 3600 1
# save 300 100
# save 60 10000

此配置也是默认的配置,在3600秒内有一条数据发生改变、300秒内有100条key发生改变、60秒内有10000个key发生改变就会触发备份。

RDB持久化的备份方式:

1、自动触发
达到备份策略条件时候触发

2、手工触发
使用bgsave命令、save命令。不建议使用save命令,因为会阻塞线程

AOF持久化方式

由于RDS持久化方式数据的安全性很低,所以redis还提供另外一种持久化方式AOF。
AOF默认情况下是关闭,如果我们需要开启的时候需要通过下面的配置项打开
即把appendonly 配置值由no修改为yes.
在这里插入图片描述

appendonly yes

AOF的同步机制

在执行修改类的命令时,把命令追加到AOF文件中,如果这样会导致每次命令执行都会与磁盘进行一次交互,这个会严重的影响到性能,所以redis提供了配置项来指定刷盘的时机:

# appendfsync always 表示每次写入都执行fsync(刷新)函数 性能会
非常非常慢 但是非常安全
appendfsync everysec 每秒执行一次fsync函数 可能丢失1s的数据
# appendfsync no 由操作系统保证数据同步到磁盘,速度最快 你的数
据只需要交给操作系统就行

即使用默认的策略会导致有可能1秒左右的数据丢失

aof的重写机制

为什么需要重写呢?
因为我们会在每次更新操作都会记录指令到aof文件中,随着时间的推移该文件会越来越大。所以我们就需要当前内存的数据记录下来,然后把之前的文件删除。
aof的重写流程是什么样的呢?

1. Redis fork一个子进程,在一个临时文件中写入新的AOF (当前内存的
数据生成的新的AOF)
2. 那么在写入新的AOF的时候,主进程还会有指令进入,那么主进程会在
内存缓存区中累计新的指令 (但是同时也会写在旧的AOF文件中,就算
重写失败,也不会导致AOF损坏或者数据丢失)
3. 如果子进程重写完成,父进程会收到完成信号,并且把内存缓存中的指
令追加到新的AOF文件中
4. 替换旧的AOF文件 ,并且将新的指令附加到重写好的AOF文件中。

在Redis4.0以后支持aof重写的时候,以RDB的方式生成新的AOF文件,然后后续的指令还是以aof的方法追加到该文件中,配置的参数是:
混合方式默认是开启的

aof-use-rdb-preamble yes

什么时候会开启AOF的重写

这个也是通过配置项配置,默认情况下,超过64M且到达重写后文件两倍的时候会触发重写,默认的配置如下:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 

AOF的优势与不足

优势

1.安全性高,就算默认的持久化同步机制,也最多只会导致1s丢失。
2.AOF由于某些原因,比如磁盘满了等导致追加失败,也能通过redischeck-aof 工具来修复
3.格式都是追加的日志,所以可读性更高

不足

  1. 数据集一般比RDB大
  2. 持久化跟数据加载比RDB更慢
  3. 重写的时候,因为重写的时候,新的指令会缓存在内存
    区,所以会导致大量的内存使用

http://www.ppmy.cn/news/343436.html

相关文章

柔性机械臂的振动测量和控制研究进展综述

摘要: 柔性机械臂通常具有柔性关节和/或连杆.在过去的40多年里,柔性机械臂的研究取得了长足的进展.本文综述了柔性机械臂在动力学建模方法、振动的传感器测量系统和控制算法研究方面的发展现状、研究热点和前沿进展.首先,简要说明了柔性机械臂的优缺点和复杂性,介绍了柔性关…

多功能推拉力测试机试验为芯片的品质和性能评估提供科学依据

半导体芯片是一种集成电路,由多个晶体管、电容器、电阻器等电子元件组成,通过微电子技术制造而成。它具有体积小、功耗低、速度快、可靠性高等优点,是现代电子产品的核心部件之一。半导体芯片的制造过程非常复杂,包括晶圆制备、光…

加速度传感器选型参数

加速度传感器:Acceleration sensor 1.可测加速度范围: ①紧急制动减速度 紧急制动时,汽车的最大减速度一般为7.5~8 m/s^2。 ②平均制动减速度或平均加速度 普通情况下,汽车的平均减速度应为3~4 m/s^2。 ③正常制动减速度 实际…

浅谈应变式扭矩传感器原理

扭矩是使物体转动的一种力矩,在电机测试,测控等行业均有扭矩传感器的使用。所以大部分扭矩都是作用在刚性轴体上,通过刚性元件表面形变使得应变片产生毫伏信号获得当前扭矩值,扭矩传感器因为使用方式不同分为两种——静态扭矩传感…

ZNNT-5NM 扭矩测量模块

00扭矩测量模块 由白超购买的 ZNNT-5NM扭矩模块 现在到货了。 1.基本参数 型号铭牌信息: 信号:ZNNT-5NM灵敏度: η 1.836 m V / V \eta 1.836mV/V η1.836mV/V ▲ 扭矩模块 ▲ 使用说明书 2.接口定义 ▲ 传感器对外接口 红黑绿白VCCGNDO…

[02] BLEMotion-Kit 基于QMI8658传感器使用加速度计进行倾斜检测

文章目录 1. 先修知识2. 原理(单轴为例)2.1 单轴倾斜2.2 双轴倾斜2.3 三轴倾斜 3. 视频演示 1. 先修知识 2. 原理(单轴为例) 首先我们要知道的是:当目标轴(本例中为X轴)与地球表面平行时,传感器处于 0g 场。顺时针或逆…

重力加速度测试仪软件,重力加速度智能测试仪的研究与设计

摘要 本文阐述了一种基于STC12C5204AD单片机的智能化重力加速度测试仪的研究和设计,利用红外传感器检测技术、单片机智能控制技术、LCD显示技术,完成较精确的计时、计算、存储、显示以及数据处理等一系列工作避免了因多次重复测量及人工数据处理过程中引…

加速度传感器芯片MMA8451Q初步——倾角计算与校准值

MMA845xQ系列是飞思卡公司出品的一系列加速度传感器芯片,通过测量XYZ三轴的加速度可以检测倾角,自由落体,翻转,脉冲,振动等一系列运动状态。 我用的是14位精度的MMA8451Q。单片机型号为STC8A8K64。 通过读取倾角寄存器…