redis持久化机制

article/2025/9/22 21:06:56

redis持久化机制

  • RDB(redis database)
    • 触发方式
      • 配置文件自动化触发
      • save命令
      • bgsave命令
      • shutdown命令
      • flushall命令
      • 主从复制
  • AOF(append only file)
    • AOF方式的三种写入策略
    • 触发方式
  • 混合持久化

redis默认的持久化机制是RDB。

redis是常驻内存的数据库,
将数据持久化到磁盘上是很有必要的,否则一旦宕机或重启,数据就会丢失。

redis的持久化方式有三种。

RDB(redis database)

每隔一段时间会把当前内存中的数据生成一个快照(.rdb)文件,保存在磁盘上,
以二进制的形式,体积小,默认文件名dump.rdb,RDB是redis默认采用的持久化方式。

在这里插入图片描述

触发方式

配置文件自动化触发

在redis.conf中有如下配置:

save 900 1       # 在900秒后,如果有至少1个key发生变化,redis会触发bgsave命令创建快照;
save 300 10      # 在300秒后,如果有至少10个key发生变化,redis会触发bgsave命令创建快照;
save 60 10000    # 在60秒后,如果有至少10000个key发生变化,redis会触发bgsave命令创建快照。

在这里插入图片描述

save命令

save是一个同步操作,
是在主进程中进行的,会阻塞redis服务,
一直到持久化完成,才能正常提供redis服务。

bgsave命令

bgsave是一个异步操作,
主进程会通过fork创建一个子进程,
用来进行持久化,完成后自动结束。
在这里插入图片描述

shutdown命令

执行shutdown命令会自动生成快照文件。

flushall命令

执行flushall命令会清空redis中的数据,并且清空dump.rdb文件。

主从复制

当从服务器连接到主服务器,
会发送一个sync命令进行一次主从复制,这个时候在主服务器触发RDB持久化。

如果系统发生崩溃,会丢失最近一次持久化到发生崩溃这段时间的数据。

AOF(append only file)

AOF会实时记录redis的每一次写操作,保存到.aof文件中,默认文件名为appendonly.aof,
通过appendonly参数开启。

在这里插入图片描述

AOF方式的三种写入策略

# appendfsync always # 每次写操作都会记入aof文件,最安全但降低redis的速度;
appendfsync everysec # 每隔1秒同步一次写操作,理论上最多只会丢失1秒的数据,是兼顾数据安全和性能的方案;
# appendfsync no     # 让操作系统决定何时同步,不推荐,会丢失不定量的数据。

在这里插入图片描述

触发方式

auto-aof-rewrite-percentage 100 # 当文件大小比上次重写后文件大小大一倍(100%);
auto-aof-rewrite-min-size 64mb  # 当文件大小不低于64MB。

两个条件同时满足才会触发。

在这里插入图片描述
也可以通过bgrewriteaof命令触发。

混合持久化

redis4.0及以上支持RDB和AOF混用的持久化方式,通过aof-use-rdb-preamble配置开启。
RDB记录的是上次持久化的数据,AOF记录从上次持久化到当前这段时间的写操作,
通常这部分文件会很小,恢复数据的时候,先加载RDB文件,再执行AOF,使效率提高。

refs:
Java架构成长之路:Redis持久化机制详解
不知努力的bd:Redis持久化机制
monkeydai:redis持久化机制


http://chatgpt.dhexx.cn/article/Q7IYXKJV.shtml

相关文章

Redis持久化方式

1 RDB RDB(Snapshot 内存快照) 。RDB是默认的持久化方式,按照一定的策略周期性的将内存中的数据生成快照保存到磁盘。 每次快照持久化都是将内存数据完整写入到磁盘一次。并不是增量,如果数据量过大,会引起大量的磁盘IO,影响性能…

Redis持久化面试题

Redis持久化面试题 1.redis中有哪些持久化方式?2.RDB的工作原理3.RDB触发机制4.RDB持久化的缺点5.AOF的工作原理6.开启AOF7.AOF触发机制8.RDB和AOF的优缺点9.RDB和AOF的优先级 1.redis中有哪些持久化方式? ​ redis中的持久化有两种方式,分别…

Redis 持久化

目录 Redis 中的持久化 Redis 的核心架构 IO多路复用线程模型 核心工作单线程模型 Redis持久化介绍 持久化的意义 持久化机制 持久化方式对比 Redis 持久化 - RDB RDB简介 RDB的触发机制 Redis持久化- AOF AOF简介 AOF 的重写机制 AOF的触发机制 AOF重写机制的副…

Redis持久化方案

持久化方式 通常数据库存在三种用于持久操作以防止数据损坏的常见策略: 1.是数据库不关心故障,而是在数据文件损坏后从数据备份或快照中恢复。RDB就是这种情况2.该数据库使用操作日志记录每个操作的操作行为,以在失败后通过日志…

Redis持久化详解

一、概述 在Redis中,实现高可用的技术主要包括持久化、复制、哨兵和集群,下面分别说明它们的作用,以及解决了什么样的问题。 持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份…

Redis的持久化方式

Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种,也可以将这两种方式结合使用。 •RDB:根据指定的规则“定时”将内存中的数据存储在硬…

Redis持久化详解(简单易懂)

首先先来谈一谈对持久化的理解 持久化(Persistence) 在Redis中的工作原理就是将你存储在缓存中的数据集异步的保存在你的磁盘中实现持久存储 当电脑或者服务器发生宕机时 我们的内存会被清空 但是存储在磁盘中的数据不会丢失 当我们再次打开Redis时 磁盘中的数据集就会再次同步…

Redis持久化

Redis的持久化方式 Redis的持久化有两种方式:RDB和AOF,redis默认采用的是RDB的方式。 RDB 在默认配置中,Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。 可以配置持久化策略:save N M,让redis在“N秒…

Redis - 持久化有哪几种方式,怎么选?

1、AOF 持久化 Redis是基于内存的,如果Redis服务器挂了,数据就会丢失。为了避免数据丢失了,Redis提供了两种持久化方式,RDB和AOF。我们先来介绍AOF。 AOF(append only file) 持久化,采用日志的…

STM32-Arduino编程 CAN总线通信

STM32-Arduino编程 CAN总线通信 环境说明使用Arduino开发STM32原因直接开始操作 环境说明 开发软件:vscodePlatformIO 操作系统:win10 开发板:STM32F103C8T6 CAN总线通信模块:TJA1050 使用Arduino开发STM32原因 STM32开发比较常…

ESP8266-Arduino编程实例-QRE1113红外反射传感器

QRE1113红外反射传感器 1、QRE1113介绍 QRE1113 具有易于使用的模拟输出,它会根据反射回传感器的红外光量而有所不同。 QRE1113 IR 反射传感器由两部分组成 - 一个 IR 发射 LED 和一个 IR 敏感光电晶体管。 当 VCC 和 GND 引脚通电时,传感器内部的 IR LED 将亮起。 由于深…

ESP8266-Arduino编程实例-MLX90614红外测温传感器驱动

MLX90614红外测温传感器驱动 1、MLX90614传感器介绍 MLX90614 是一款非接触式红外测温仪,测量范围为 -70 至 +380 摄氏度。 MLX90614有以下特性: 体积小,成本低安装在带有两种引脚的分线板上用于 I2C 接口的 10k 上拉电阻,带有可选的焊接跳线在宽温度范围内进行工厂校准…

STM32-Arduino编程 串口通信

STM32-Arduino编程 串口通信 环境说明使用Arduino开发STM32原因直接开始操作 环境说明 开发软件:vscodePlatformIO 操作系统:win10 开发板:STM32F103C8T6 其他硬件:USB转TTL模块(需要安装对应驱动) 使用A…

ESP8266-Arduino编程实例-金属触摸传感器驱动

金属触摸传感器驱动 1、金属触摸传感器介绍 KY-036金属触摸传感器模块采用KRS13达林顿NPN晶体管,其信号由电路部分控制,电路部分集成LM393,内部有两个比较器。 当触摸弯曲在晶体管上的裸线(由晶体管的基极表示)时,环境的 50 Hz 信号被注入到高增益放大器中。放大器的输…

Arduino编程语言之setup()和loop()

Arduino编程语言之setup()和loop() setup() 当程序开始执行时,将调用setup()函数,使用此函数 ①用来初始化变量 ②管脚模式 ③调用库函数 注意:setup()函数将只运行一次。 例子: int ledPin 13; void setup() { pinMode(ledP…

esp8266使用Arduino编程实现自动浇水、OTA升级功能

创作前情: 上海疫情已有一段时间,从三月初算起来已过了一个多月,当时用了泡沫箱种了些小香葱,这几天把它搬到了室外阳台,由于浇水不方便,想着做一个自动浇水的设备。 实现目的: 可以远程控制浇…

ESP8266-Arduino编程实例-MPL3115A2压力传感器驱动

MPL3115A2压力传感器驱动 1、MPL3115A2介绍 MPL3115A2 是一款紧凑型压阻式绝对压力传感器,具有 I2C 数字接口。 MPL3115A2 具有 20 kPa 至 110 kPa 的宽工作范围,该范围涵盖了地球上的所有表面高度。 MEMS 使用片上温度传感器进行温度补偿。 压力和温度数据被馈送到高分辨率…

ESP8266-Arduino编程实例-AHT20温湿度传感器驱动

AHT20温湿度传感器驱动 1、AHT20介绍 AHT20作为新一代温湿度传感器,在尺寸和智能方面树立了新标准。 它嵌入在适合回流焊接的双排扁平无铅封装中,底部为 3 x 3 mm,高度为 1.0 mm。 该传感器以标准IAHT20输出校准后的数字信号,作为新一代温湿度传感器,在尺寸和智能方面树…

ESP8266-Arduino编程实例-中断

中断 本文将演示如何使用 ESP8266 NodeMCU 的中断和定时器。 中断检测 GPIO 状态的变化且无需不断检查其当前值。通过使用中断,当检测到更改时,会触发事件(调用函数)。 在实例中,使用 PIR 运动传感器检测运动:当检测到运动时,ESP8266 会启动一个定时器并打开 LED 预定…

ESP8266-Arduino编程实例-MLX90393磁场传感器驱动

MLX90393磁场传感器驱动 1、MLX90393介绍 MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis 技术提供与沿 XYZ 轴感应的磁通密度成比例的 16 位输出,还提供温度输出信号。 这些数字值可通过 I2C 和 SPI 获得,其中 …