Redis持久化

article/2025/7/22 17:29:16

文章目录

  • 持久化
    • 1、RDB
      • 1)触发机制
      • 2)bgsave命令的运行流程
      • 3)RDB文件的处理
      • 4)RDB的优缺点
    • 2、AOF
      • 1)开启AOF
      • 2)AOF工作流程
      • 3)AOF同步策略
      • 4)重写机制
      • 5)重写机制的运行流程

持久化

redis虽然主要进行内存存储,但是也提供了硬盘存储,近似实现了“既要有要”。
Redis实现持久化使用了两种方法:

  • RDB(Redis Database Backup,类似于定期存储)
  • AOF(Append-Only File,类似于实时存储)

1、RDB

RDB持久化是把当前进程中的全量数据生成一个快照,转成rdb二进制文件并压缩,保存到硬盘的过程(服务器默认开启RDB),RDB在redis中可以手动触发,也可以自动触发。

快照:
快照类似于警察快速在案发现场用相机快速进行取证。即把当时的内存数据,快速记录下来,然后把这些内存数据统统保存到硬盘中,等一下会详细讲述这个过程。

1)触发机制

手动触发:

  • save命令:阻塞当前redis服务器知道RDB完成,如果内存过大,RDB操作一次性开销是非常大的,所以这个命令一般不要用。
  • bgsave命令:Redis执行fork操作,创建一个子进程,RDB操作全由子进程完成,阻塞只会发生在fork阶段,时间非常短。

1)fork定义:

  • 是Linux内核提供的一个系统调用,用于从当前进程(成为父进程)创建一个和父进程几乎一样的子进程。
  • 子进程是父进程的一个副本,继承父进程的内存、代码、打开的文件描述符,但是拥有独立的PID以及独立的内存空间
  • 上述过程看上去非常“重量”,实际不然,因为Linux使用了 写时拷贝(Copy-on-Write) 这样的机制去优化。

2)Copy-on-Write:
fork创建子进程的过程不会中不会真的把父进程的所有数据都拷贝到自己的内存空间中,而是只会复制部分基本的元数据(这些数据很少因此较为轻量)。父子进程共享一个内存页面(但是内存空间是隔离的)只有父进程内存数据发生修改,子进程才会把之前父进程的数据写入到自己的内存空间。

自动触发:

  1. 可以通过redis默认路径:/etc/redis/redis.conf修改save配置,指定何种情况redis自动触发RDB。
    格式是save m n m是秒 n是数据库修改次数 。如 save 60 1表示1分钟修改过一次或者多次,执行RDB。 save "" 表示不进行自动配置。
    另外,save配置可以设置多个,满足任意一个配置就会触发RDB。

  2. 在Redis集群中主节点要全量复制数据给从节点,其中一个过程也会触发RDB,把生成的RDB文件发送给从节点。

  3. 执行shutdown 命令关闭 Redis 时,执⾏ RDB 持久化。

2)bgsave命令的运行流程

在这里插入图片描述

  1. bgsave发送给父进程,如果父进程有其他子进程正在运行,例如RDB/AOF子进程,那么它会直接返回,不执行。反之,往下执行。
  2. 父进程执行fork调用,常见一个子进程,在此期间,父进程进入阻塞状态。
  3. 子进程创建完成,可以继续响应其他命令。
  4. 子进程把内存中的数据通过特定算法转成二进制rdb文件,放到硬盘中。
  5. rdb文件生成完成后,通知父进程任务完成,子进程自动退出。

3)RDB文件的处理

  • 保存:RDB 文件保存用 dir 配置指定的目录(默认 /var/lib/redis/)下,文件名通过 dbfilename 配置(默认 dump.rdb)指定。可以通过执行 config set dir {newDir} 和 config set dbfilename {newFileName} 运行期间动态执行备份,并把 RDB 文件复制到新目录。
  • 压缩:Redis 默认采用 LZF 算法对生成的 RDB 文件做压缩处理,压缩后的文件远远小于内存大小,默认开启,可以通过参数 config set rdbcompression {yes|no} 动态修改。

ℹ️ 虽然压缩 RDB 会消耗 CPU,但可以大幅降低文件的体积,为便使用到硬盘或通过网络发送到从节点,因此建议开启。

  • 校验:如果 Redis 启动时加载损坏的 RDB 文件拒绝启动,支持可以使用 Redis 提供 redis-check-dump 工具检测 RDB 文件并获取对应的错误报告。

4)RDB的优缺点

  • RDB 是一个紧凑压缩的二进制文件,代表 Redis 在某个时间点的数据库快照。非常适用于备份,全量复制和灾难恢复。
  • Redis 加载 RDB 数据时间远超 AOF 的方式。
  • RDB 方式数据没办法做到实时持久化 / 秒级持久化。因为 bgsave 每运行都要执行 fork 创建子进程
  • RDB 文件使用特有二进制格式保存,Redis 版本通过过程中有多个RDB 版本,兼容性可能有风险

2、AOF

AOF(Append Only File)持久化:以独⽴⽇志的⽅式记录每次写命令,重启时再重新执⾏ AOF⽂件中的命令达到恢复数据的⽬的。AOF 的主要作⽤是解决了数据持久化的实时性,⽬前已经是Redis 持久化的主流⽅式。因为它兼顾了数据时效和性能。

1)开启AOF

AOF默认不开启,开启需要在etc/redis/redis.conf中appendonly修改为yes:在这里插入图片描述

2)AOF工作流程

在这里插入图片描述

  1. 进程写入命令后会把命令另外先写入到一个缓冲区(内存中的一个滴地方)
  2. AOF缓冲区根据不同策略把缓冲区命令 同步到AOF文件(硬盘)中
  3. 当AOF文件长度到达一定程度会进行重写操作,达到压缩AOF文件的目的
  4. Redis重启时会优先根据AOF文件进行解析重启,因为AOF文件数据一定是最新的:
    在这里插入图片描述

3)AOF同步策略

刚才提到:AOF缓冲区根据不同策略把缓冲区命令同步到AOF文件。
这里的策略Redis提供了三个:

可配置值说明
always命令写入 aof_buf 后调用 fsync 同步,完成后返回
everysec命令写入 aof_buf 后只执行 write 操作,不进行 fsync。每秒由同步线程进行 fsync。
no命令写入 aof_buf 后只执行 write 操作,由 OS 控制 fsync 频率。

补充说明:

  • write是Linux内核的一个系统调用,只会把数据写入到一个缓冲区(内存)不会写入硬盘。
  • fsync 也是Linux内核的一个系统调用,他会把缓冲区数据直接同步到硬盘中,执行期间当前进程会进入阻塞状态,不能处理其他命令
  • always配置性能最差,非特别重要数据不建议使用
  • everysec是默认的redis配置
  • no配置由于是操作系统对fsync进行控制,因此不可控,除非数据不太重要,不然也不建议开启。

在实际开发过程中,我们要根据实际需求,启用不同策略。

4)重写机制

刚才讲到,重写机制会会对AOF文件进行压缩,其原理大概是这样的:
源文件:

set key1 value1
set key2 value2
del key1

压缩后的文件:

set key2 value2

实际上就是把命令集合中冗余的部分删除,只关注数据最终的结果。

5)重写机制的运行流程

在这里插入图片描述

  1. 请求执行AOF重写。
    如果当前正在执行AOF重写,直接返回。进程正在进行bgsave操作,等待bgsave运行完成,在进行AOF重写。
  2. 父进程调用fork,创建一个子进程(期间阻塞)
  3. 子进程创建完之后,父进程不仅会把接下来接收到的命令集合放到原来的aof_buf,还会放到另一个aof_rewrite_buf中。这两个缓冲区缺一不可。
  4. 子进程在硬盘中创建一个新的AOF文件,把父进程fork那个时刻的内存数据进行重写,然后存放到新的AOF文件中。
  5. 完成重写后
    a. 父进程fork那个时刻的内存数据进行重写,并且放到新的AOF文件中后,子进程通知父进程完成重写
    b. 然后把aof_rewrite_buf中的命令直接append到新的AOF文件中。
    c. 最后新的AOF文件替换掉旧的AOF文件。

END

http://www.hkcw.cn/article/fUnLKQCkVD.shtml

相关文章

循环流化床锅炉关键技术设计与优化路径

摘要 循环流化床锅炉(CFB)作为高效清洁燃烧技术的代表,在燃煤发电、生物质利用等领域具有显著优势。本文从设计原理出发,详细分析物料循环系统、燃烧室结构、受热面布置等核心设计要素,并提出针对不同燃料特性的优化方…

PyTorch-Transforms的使用(二)

对图像进行处理 安装open cv ctrlP 看用法 ToTensor的使用 常见的Transforms 归一化的图片 两个长度为三的数组,分别表示三个通道的平均值和标准差 Resize() Compose() 合并执行功能,输入进去一个列表&a…

【萌笔趣棋】网页五子棋项目测试报告

目录 一.项目介绍 (一)项目简介 (二)功能介绍 (三)页面展示 1.注册页面 2.登录页面 3.游戏大厅页面 4.游戏房间页面(对战) 二.功能测试 (一)出现的…

乌克兰袭击俄轰炸机基地画面曝光 大胆军事行动震动俄乌

乌克兰官员周日宣布,乌克兰军队对俄罗斯境内深处的多个军用机场进行了大规模无人机袭击。这些机场是用于进行空袭的战略轰炸机基地,这次行动被认为是自俄乌冲突爆发以来乌克兰军队最大胆的一次军事行动。此次代号为“蛛网”的袭击行动经过一年半的准备。乌克兰无人机的目标包…

卡友护送青藏线司机骨灰回家 爱心跨越2400公里

河南46岁的卡车司机常志荣在青海五道梁地区因高原缺氧离世,家中还有六个孩子需要抚养。为了省下一罐氧气的钱,他在出发前只购买了一罐氧气。五道梁地区海拔4665米,含氧量不足海平面的一半,自然环境极其恶劣。得知消息后,多名卡车司机自费远赴2000多公里护送常志荣的骨灰及…

北京全市上汛责任人名单公示 防汛抗旱任务明确

今日天气早晨有轻雾,白天晴转多云,西部北部有分散性阵雨或雷阵雨,北风一级转三四级,阵风六七级,最高气温31℃;夜间多云转晴,北风三级左右转一级,最低气温15℃。白天阵风明显,户外注意防风。尾号限行无昨日8时北京全市上汛,为做好2025年防汛抗旱工作,切实履行防汛抗旱…

Oracle递归/树状查询

目录 1.递归与LEVEL简介 2.往子项找 3.往父项找 4.练习题 练习1:找出BLAKE的直系下属有哪些? 练习2 5.递归的其他应用——生成连续的数字或日期 1.递归与LEVEL简介 递归:从顶层到下一层级,一层一层递归去找。 递归里…

美国发生针对性恐怖袭击 亲以色列团体遇袭

美国媒体6月1日报道,科罗拉多州博尔德市当天发生一起针对亲以色列团体活动的袭击事件,造成至少5人受伤。当地警方已经封锁事发街区并疏散数个邻近街区,一名男子被逮捕。美国联邦调查局将这一事件定性为“有针对性的恐怖袭击”。责任编辑:zhangxiaohua

巴媒称以军炸毁加沙中部清真寺 以色列暂无回应

据巴勒斯坦《圣城报》报道,当地时间6月2日凌晨,以色列军方飞机炸毁了加沙地带中部代尔拜拉赫的一座清真寺。目前,以色列方面尚未对此事作出回应。责任编辑:zhangxiaohua

InfluxDB 高级分析实战:预测、技术指标与异常检测全指南

InfluxDB 不仅是强大的时序数据存储引擎,更是企业构建智能分析系统的核心平台。本文全面解析如何利用 InfluxDB 内置函数与 Python 生态实现: ✅ ​​预测分析​​:从简单季节性预测(HOLT_WINTERS)到复杂模型集成&…

图解AI三大核心技术:RAG、大模型、智能体【推荐文章】

大模型中的Transformer与混合专家(MoE) 5种大模型微调技术 传统RAG与Agentic RAG对比 5种经典的智能体设计模式 5大文本分块策略 智能体系统的5个等级 传统RAG vs HyDE RAG vs Graph RAG KV caching 转载的原文链接:图解AI三大核心技术&#…

命令行部署金仓读写分离集群

有大佬会问,图形化方式部署多流畅,干嘛自虐非要倒腾命令行方式,那是因为我们的环境要通过VPN再到堡垒机最后才能xshell登录,而且VPN、堡垒机不定时频繁超时断开。 KingbaseES读写分离集群简介 在多数据库实例的热备模式下&#…

南部战区海军多艘舰艇实战化演练 提升协同作战能力

南部战区海军某训练中心联合某驱逐舰支队组织渭南舰、玉林舰等多艘舰艇,在多个海域展开多个课目训练,旨在检验编队协同作战能力和指挥员决策水平。在编队航行途中,突然接到上级通报,当前活动海区有敌方无人艇活动。各舰立即进入战斗状态。渭南舰雷达战位敏锐发现不明海上目…

乌对俄发动大规模特种作战 美方回应 未提前获知袭击计划

当地时间6月1日,美国政府官员表示,特朗普政府并未提前得知乌克兰将在周末对俄罗斯发起的大规模袭击行动。同一天,乌克兰国家安全局在社交媒体上宣布,对俄罗斯实施了特种作战行动,袭击了俄军的战略轰炸机。乌克兰总统泽连斯基当晚发表视频讲话称,乌国家安全局为此行动筹备…

VisionPro项目记录2 —— 不规则胶路检测

简介 本文介绍了一种基于Cognex视觉工具的胶路检测方法,分为直线和弧形两部分检测。 直线部分采用卡尺工具检测胶路宽度,通过动态调整仿射矩形区域进行多位置测量;弧形部分使用blob工具沿圆周设置检测区域。 两种方法均通过脚本实现工具映…

STM32F407寄存器操作(多通道单ADC+DMA)

1.前言 又是半年没更新了,趁着端午放假有点时间,并且最近项目要用这块知识,我就顺带研究一下ADC吧。 一般来说ADC主要用法包含了1.单通道软件触发(这是最简单和最常用的用法)2.单通道多次采集(需要快速采…

RuoYi前后端分离框架实现前后端数据传输加密(二)之前端篇

一、背景 本文是RuoYi前后端分离框架实现前后端数据传输加密(一)之后端篇文章配套的,主要介绍前端对自定义字段传输加密的实现,两篇文章结合可以完整的完成RuoYi前后端分离框架对API通信过程中实现自定义字段加密传输。前端的加解密实现,不涉及到界面的修改,仅仅是方法的…

马斯克称不想为美政府所做一切担责 “政府效率部”成替罪羊

美国企业家埃隆马斯克在接受哥伦比亚广播公司采访时表达了对政府的看法。他表示自己并不想公开反对美国政府,但也不愿意为政府所做的一切承担责任。马斯克提到,他领导的“政府效率部”成了所有问题的替罪羊,所有的裁员无论真假都被归咎于这个部门。马斯克还表示,他对国会共…

苏超第三轮全部战罢 南通队强势领跑

6月1日晚9时28分,江苏省城市足球联赛第三轮结束。本轮赛事分为两个比赛日进行。5月31日,镇江队0∶2不敌宿迁队,常州队0∶1负于扬州队,徐州队2∶1战胜连云港队。6月1日,盐城队1∶0击败淮安队,泰州队0∶4输给南通队,南京队与无锡队的比赛以1∶0结束。本轮联赛中,南通队和…

节后粽子有买三送一还有6折出售 促销力度大吸引顾客

作为传统节令食品,粽子在今年端午节期间再次成为餐桌主角。与往年不同的是,除了经典的“咸甜之争”外,“低卡”、“低脂”等健康概念成为今年粽子市场的新亮点。据《2025中国粽子行业白皮书》,从规模上来看,2025年中国粽子行业市场规模将达到110亿元,增长率在7%左右,产量…