(四)Redis的持久化

[Unity_Plastic SCM小技巧] 使用 UnityYAMLMerge 工具合并场景和预制件文件 首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Content... 阅读详情

一 什么是redis持久化

因为Redis数据是基于内存读写,为防止Redis服务器关闭或者宕机造成数据的丢失,我们通常需要对redis做持久化,即:把内存中的数据(命令)保存一份到磁盘中来做一份备份,当redis服务关闭或宕机后,在Redis服务器重启后将数据从磁盘加载到内存中,不至于造成数据的丢失。
Redis提供了两种持久化方式RDB和AOF,可以通过修改redis.conf来配置,开启Redis持久化后,在redis的安装目录会看到持久化文件:“appendonly.aof”和“dump.rdb”

Redis持久化原理

  • 保存持久化数据

在这里插入图片描述

  • 启动Redis载入持久化数据
    在这里插入图片描述

二 RDB持久化

RDB持久化是把当前进程数据生成快照保存到磁盘中的过程,快照文件就是一个RDB文件(二进制),当我们需要对Redis的数据进行恢复时,我们就可以去加载这个文件,将某时刻的备份文件恢复到redis中。

2.1 触发机制

手动触发:

  • save(同步): 阻塞当前redis服务器,直到RDB完成为止,阻塞耗时较长,一般不在线上环境使用
  • bgsave(异步): Redis进程执行fork操作创建子进程,RDB的持久化由子进程负责,完成后自动结束,阻塞只发生在fork阶段,一般时间比较短

自动触发:

  • 自动生成: 根据下面的配置自动触发文件dump,dump操作就是bgsave
save 900 1 # 当在900秒改变了1条数据,将触发 bgsave 操作
save 300 10 # 当在300秒改变了10条数据,将触发 bgsave 操作
save 60 10000 # 当在60秒改变了10000条数据,将触发 bgsave 操作
dbfilename dump-${port}.rdb # 一般的文件命名方式,加上端口区分
dir /bigdiskpath # 选择一个比较大的硬盘路径,甚至分盘
stop-writes-on-bgsave-error yes # 如果 bgsave 发生了错误,就停止写入
rdbcompression yes # 一般采用压缩格式
rdbchecksum yes # 是否采用校验和的方式,一般采用

2.2 RDB的优缺点

  • 优点
    • RDB是个紧凑压缩的二进制文件,代表redis在某个时间节点的数据快照.非常适合备份,全量复制等场景
    • Redis加载RDB恢复数据远快于AOF方式
  • 缺点
    • RDB方式数据没办法做到实时/秒级持久化(容易造成数据的丢失).因为bgsave每次运行都要执行fork操作创建子进程,属于重量级操作,频繁的执行成本比较高

三 AOF持久化

以独立日志的方式记录每次写命令,重启的时候在执行AOF文件中的命令达到恢复数据的目的,AOF的主要作用是解决持久化的实时性

3.1 AOF工作流程

AOF 的工作流程:命令写入(append)、文件同步(sync)、文件重写(rewrite)、重启加载(load)
在这里插入图片描述

  1. 客户端发起写的请求,Redis会把写入请求命令追加到aof_buffer缓冲区中
  2. AOF缓冲区根据相应的策略向磁盘做同步操作
  3. 随着AOF文件越来越大,需要定期的对AOF文件进行重写,达到压缩的目的
  4. 当Redis服务器重启时,可以加载AOF文件进行数据恢复

3.2 AOF的三种同步策略

  • always:首先redis写命令到aof_buf缓存区,然后缓冲区(always)把每条命令fsync到磁盘AOF文件
    • 优点: 数据不丢失
    • 缺点: IO开销大 ,一般的硬盘只有几百 TPS,无法满足 Redis 的高性能
  • everysec: 首先 redis 写命令到 aof_buf 缓存区,然后缓冲区(每秒)会把命令 fsync 到磁盘 AOF 文件
    • 优点:每秒一次 fsync 操作,适当保护磁盘
    • 缺点:最多可能丢失 2 秒数据
  • no: 首先 redis 写命令到 aof_buf 缓存区,什么时候该 fsync 是由操作系统决定的。
    • 优点:不用管
    • 缺点:不可控

3.3 AOF的重写机制

随着命令不断的写入AOF,文件会越来越大,于是引入了AOF重写机制来压缩文件的体积,本质就是把一些过期的、没有用的、重复的、以及一些可以优化的命令进行一个简化,简化成一个较小的AOF文件。

AOF重写的两种方式:

  • bgrewriteaof:客户端输入 bgwriteaof 命令,redis 会使用一个 linux 的 fork() 函数,生成一个子进程,子进程再进行 AOF 重写生成新的 AOF 文件。
  • AOF 重写配置自动触发
# 配置
auto-aof-rewrite-min-size # AOF文件重写需要的尺寸,也就是说当AOF多大的时候,才进行AOF的重写
auto-aof-rewrite-percentage # AOF文件增长率,比如这一次重写到了100M,下一次多久重写呢,假如说达到200M就重写,那么增长率就是100%
# 统计项
aof_current_size # AOF当前尺寸,aof_current_size > auto-aof-rewrite-min-size 触发重写
aof_base_size # AOF上次启动和重写的尺寸,增长率 = (aof_current_size - aof_base_size) / aof_base_size,增长率 > auto-aof-rewrite-percentage 触发重写

重写流程

  • 1)执行 AOF 重写请求
  • 2)父进程执行 fork 创建子进程,开销等同于 bgsave 过程
  • 3.1)主进程 fork 操作完成后,继续响应其他命令
  • 3.2)由于 fork 操作运用写时复制技术,子进程只能共享 fork 操作时的内存数据。
  • 4)子进程根据内存快照,按照命令合并规则写入到新的 AOF 文件
  • 5.1)新 AOF 文件写入完成后,子进程发送型号给父进程,父进程更新统计信息
  • 5.2)父进程把 AOF 重写缓冲区的数据写入到新的 AOF 文件
  • 5.3)使用新 AOF 文件替换老文件,完成 AOF 重写

在这里插入图片描述

3.4 AOF配置

# AOF配置
appendonly yes # 要使用AOF所有功能就置为 yes,默认是 no
appendfilename "appendonly-${port}.aof" # AOF文件名称
appendfsync everysec # 每秒进行刷盘策略
dir /bigdiskpath # 保存目录
no-appendfsync-on-rewrite yes # 是否要做AOF的append操作,yes表示不做这个操作
# AOF重写配置
auto-aof-rewrite-min-size 64MB # AOF文件重写需要的尺寸,也就是说当AOF多大的时候,才进行AOF的重写
auto-aof-rewrite-percentage 100 # AOF文件增长率,比如这一次重写到了100M,下一次多久重写呢,假如说达到200M就重写,那么增长率就是100%

四 Redis 4.0混合持久化

重启 Redis 时,我们很少使用 RDB来恢复内存状态,因为会丢失大量数据。我们通常使用 AOF 日志重放,但是重放 AOF 日志性能相对 RDB来说要慢很多,这样在 Redis 实例很大的情况下,启动需要花费很长的时间。 Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。

通过如下配置可以开启混合持久化(必须先开启aof):

aof‐use‐rdb‐preamble yes

如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
于是在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的AOF 全量文件重放,因此重启效率大幅得到提升。

五 开发运维常见问题

fork 操作

  • 同步操作,对于大多数操作系统来说 fork 是个重量级操作
  • 改善 fork 操作的耗时:
    • 优先使用物理机或者高效支持 fork 操作的虚拟化技术
    • 控制 Redis 实例最大可用内存 maxmemory,fork 耗时跟内存量成正比,线上建议每个 Redis 实例内存控制在 10GB 以内
    • 合理配置 Linux 内存分配策略,避免物理内存不足导致 fork 失败
    • 降低 fork 频率,例如放宽 AOF 重写自动触发机制,避免不必要的全量复制

AOF 追加阻塞

当开启 AOF 持久化时,常用的同步硬盘的策略是 everysec,用于平衡性能和数据安全性。对于这种方式,Redis 使用另一条线程每秒执行 fsync 同步硬盘。当系统硬盘资源繁忙时,会造成 Redis 主线程阻塞。

塞流程分析

  • 1)主线程负责写入 AOF 缓冲区
  • 2)AOF 线程负责每秒执行一次同步磁盘操作
  • 3)主线程负责对比上次 AOF 同步时间:
    如果距上次同步成功时间在 2 秒内,主线程直接返回
    如果距上次同步成功时间超过 2 秒,主线程将会阻塞,直到同步完成
    可以发现两个问题:
  • 1)everysec 配置最多可能丢失 2 秒数据,不是 1 秒。
  • 2)如果系统 fsync 缓慢,将会导致 Redis 主线程阻塞影响效率。
    AOF 阻塞问题定位:
  • 发生阻塞时,将会输出 Redis 日志,用于记录 AOF fsync 阻塞导致拖慢 Redis 服务的行为
  • 每当发生 AOF 追加阻塞事件时,在 info Persistence 统计中,aof_delayed_fsync 指标会累加,查看这个指标方便定位 AOF 阻塞问题。
  • AOF 同步最多允许 2 秒的延迟,当延迟发生时说明硬盘存在高负载问题,可以通过监控工具如 iotop,定位消耗硬盘 IO 资源的进程。
【WRF理论第十四期】 VEGPARM.TBL 文件详解 WRF 读取 VEGPARM.TBL 文件 阅读详情

相关推荐

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

四、Redis持久化

因为是记录命令,AOF文件会比RDB文件大的多。通过执行bgrewriteaof命令,可以让AOF文件执行重写功能,用最少的命令达到相同效果。save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。都是对num的操作,第二次会覆盖第一次的值,因此第一个命令记录下来没有意义。Redis停机时会执行一次save命令,实现RDB持久化。

qq_49723651的博客 1240

新手也能懂的Simulink汽车二自由度建模:从公式推导到模型搭建全流程

本文为新手提供了在Simulink中搭建汽车二自由度模型的完整实战指南。文章从模型核心概念讲起,详细讲解了如何将车辆动力学方程转化为状态空间模型,并逐步指导在Simulink中实现从参数设置、模块搭建到仿真验证的全过程。通过阶跃转向测试和参数影响分析,帮助读者直观理解车辆转向特性,并提供了实用的模型扩展思路与常见问题排查技巧。

weixin_29047919的博客 215

四、Redis 持久化 —— 超详细操作演示!

 Redis是一个内存数据库,所以其运行效率非常高。但也 存在一个问题:内存中的数据是不持久的,若 主机宕机 或 Redis 关机重启,则内存中的数据全部丢失。当然,这是不允许的。 Redis 具有持久化功能,其会按照设置以 快照 或 操作日志 的形式将数据持久化到磁盘。     根据持久化使用技术的不同,Redis 的持久化分为两种: RDB(Redis DataBase) 与 AOF (Append Only File)。

weixin_43412762的博客 9139

ABAQUS单元刚度矩阵输出全攻略:从理论到实践(含MTX/DAT文件对比)

本文详细解析了ABAQUS中单元刚度矩阵的输出方法,涵盖理论原理、MTX与DAT文件格式对比及二次开发应用。通过具体操作步骤和性能优化建议,帮助用户高效获取并利用刚度矩阵数据,特别适合需要进行有限元分析验证和二次开发的工程师。

lg888的博客 1006

华为OD机试真题 新系统 2026-09-06 Python&JS【仓储货物有序出库】

某仓储中心有一个货物堆放区,货物编号按乱序堆叠存放,只能从顶部取货,管理员需要将货物按编号从小到大取出。

MISAYAONE的博客 116

四、redis持久化

持久化RDB Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。 触发机制 手动触发分别对应save和bgsave命令 save bgsave Save:阻塞当前redis服务器,直到RDB过程完成位置(线上不建议使用,阻塞时间过长) Bgsave:redis进程执行fork操作创建子进程,RDB持久化过程

hjyhjy0的博客 271

Orin 10G PHY网络分析

由于调试用的10G PHY,所以整理下分析过程; 1.从Orin devkit 丝印来看RJ45 对应J17 通过搜索 MGBE_PHY_A_N 找到连接的10G PHY, 原理图上标明了MDIO address 为0x0, 使用的PHY 芯片为 Marvel 的AQR113C, 主要特性: 架构: 关键特征: MDC 连接了GPIO26_XFI0_MDC; MDIO 连接了GPIO25_XFI0_MDIO; 通过pinmux_config映射表也可以..

乐于分享 5663

【redis 四】一文搞懂redis持久化之RDB

前言: redis持久化分为RDB和AOF,此篇博文着重讲解RDB方式的持久化。演示系统 centos7。 1、官网说明 地址:https://redis.io/topics/persistence 以下内容为有道词典翻译 Redis持久性 RDB持久性按指定的时间间隔执行数据集的时间点快照。 RDB的优势 RDB是Redis数据的非常紧凑的单文件时间点表示。RDB文件非常适合备份。例如,您可能希望在最近的24小时内每小时存档一次RDB文件,并在30天之内每天保存一次RDB快照。这使您可以在灾难情况下轻松还

李光 未来科技 2723

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

手把手教你学Simulink——基于经典滤波器设计的场景:低通滤波器(LPF)的设计与频率响应仿真

滤波器是信号处理领域中非常重要的组件,用于去除不需要的频率成分或者提取有用的频率信息。低通滤波器(Low-Pass Filter, LPF)允许低于某个特定截止频率的信号通过,同时衰减高于该截止频率的信号。在本教程中,我们将学习如何使用设计一个简单的模拟低通滤波器,并对其频率响应进行仿真分析。本文介绍了如何使用设计一个简单的模拟低通滤波器,并通过仿真展示了其应用效果。通过这样的实践,您不仅能够加深对滤波器工作原理的理解,还能掌握利用Simulink进行滤波器设计与仿真的基本技能。

MHD0815的博客 5720

四、Redis持久化方案

四、Redis持久化方案 Redis是一个内存数据库,为了保证数据的持久性,它提供了两种持久化方案: RDB方式(默认) AOF方式 4.1、RDB方式 RDB是Redis默认采用的持久化方式。 RDB方式是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。 Redis会在指定的情况下触发快照。 1.符合自定义配置的快...

William 202

AXI总线详解完结篇

经过几个月的整理和发文,AXI总线详解系列正式迎来最终篇,内容基本涵盖了上一篇文章的全部内容。 所有文章的链接如下: 1、 AXI总线详解 2、AXI总线详解-总线和接口以及协议 3、AXI协议中的通道结构 4、AXI总线详解-AXI4读写操作时序及AXI4猝发地址及选择 5、AXI4交换机制 6、ZYNQ中DMA与AXI4总线-DMA简介 7、AXI总线详解-不同类型的DMA 8、AXI总线详解-DMA内部寄存器的读写方式 9、AXI总线详解-几种应用DMA的场合 10、Altera Scatter-G.

OpenFPGA的博客 5493

Redis7之持久化(四)

本文讲述了redis7的持久化,关于RDB和AOF的配置方法、基础的用法和注意事项,以及二者结合使用的用法、两者都关闭的缓存方法的讲解。

m0_55993923的博客 4120

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Redis(四)持久化策略

RDB 和AOF持久化方式详解

文帝的博客 1487

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Redis】Redis学习④ - Redis持久化

redis虽然是一个内存级别的缓存程序,即redis是使用内存进行数据缓存的,但是其可以将内存的数据按照一定的策略保存到硬盘上,从而实现数据持久保存的目的,redis支持两种不同方式的数据持久化保存机制,分别是RDB和AOF。

学无止境 121

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Redis系列四:redis持久化

redis支持RDB和AOF两种持久化机制,持久化可以避免因进程退出而造成数据丢失。 两种持久化可以单独使用其中一种,但更多情况下是将二者结合使用。 一、RDB持久化 RDB持久化把当前进程数据生成快照(.rdb)文件保存到硬盘的过程,有手动触发和自动触发。 redis会在以下几种情况下对数据进行快照。 a)根据配置规则进行自动快照; b)用户执行save或bgsave命令;...

weixin_30401605的博客 113

Redis 水滴石穿之(四)持久化

Redis 水滴石穿之(四)持久化 目录Redis 水滴石穿之(四)持久化一、概述二、RDB1、RDB快照触发时机1.1 手动触发 (save & bgsave)1.2 自动触发2、RDB快照实现原理3、RDB文件结构4、RDB常用配置5、RDB方式的优缺点三、AOF1、开启AOF2、AOF执行流程2.1 AOF命令同步2.2 AOF文件写入2.3 AOF文件重写2.3.1 AOF文件重写触发方式2.3.2 AOF重写流程3、AOF常用配置4、AOF方式的优缺点5、启动时加载四、混合持久化1、开启混

qq_39169614的博客 1561

redis面试(四)持久化

redis持久化数据的策略,应该怎么配合使用,什么业务需要持久化redis

weixin_41011482的博客 1224

Redis(四)持久化

本文转载自编程迷思,原文链接深入学习Redis(2):持久化 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关的知识——持久化、复制(及读写分离)、哨兵、以及集群。 本文将先说明上述几种技术分别解决了Redis高可用的什么问题;然后详细介绍Redis的持久化技术,主要是RDB和AOF两种持久化方案;在介绍RDB和AOF...

dlx29376的博客 140

四、Redis 的持久化(RDB、AOF)

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能! RDB(Redis DataBase) 什么是RDB?RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不.

胖太乙 8190

redis(四)持久化

redis是什么? redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支...

weixin_42231851的博客 176

四、redis持久化之RDB与AOF

导读 前面文章【一、深入理解redis之需要掌握的知识点 】中,我们对redis需要学习的内容框架进行了一个梳理。 【二、redis中String和List两种数据类型和应用场景 】、【二、redis中Hash、Set、SortedSet应用场景 】两篇文章我们对redis中String、List、Hash、Set、SortedSet五种数据类型做了一下讲解,并且对他们各自的应用场景进行了介绍。 【三、redis数据存储之跳跃表(SKIP LIST) 】深入学习支撑SortedSet排序背后的数据结构,跳跃

不吃_花椒的博客 617

Redis7持久化(四)

RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照。实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。恢复数据时再将硬盘快照文件直接读到内存中Redis的数据存在内存中,保存快照时执行的是全量快照,也就是说把内存中的数据全部记录到磁盘中,一锅端。

lh_mnbj的博客 485

Redis(四)redis持久化RDB&AOF

redis持久化RDB&AOF save,bgsave 快照的时点混乱问题 fork,copy on write BGREWRITEAOF ,隐式触发重写

书院二层楼 517

Redis的持久化(四)

redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失。为了解决这个问题,redis提供了持久化功能——RDB和AOF(Append Only File)。 RDB RDB(Redis DataBase)是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis重启会通过加载dump

bengbeng_biu 512
上一篇: (三)Redis的其他小功能
下一篇: (五)Redis内存淘汰机制
Instanceztt
博客等级 码龄7年 8356粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值