Redis(持久化 -- RDB AOF)

持久化

通常我们认为持久化为: 重启进程/重启主机之后, 数据仍然存在不丢失
把数据存储在硬盘上 – 持久
把数据存储在内存中 – 不持久


Redis 持久化

redis 是一个内存数据库, 也就是说本身是不持久的(但是快[效率高]), 于是 Redis 提供了持久化机制 — RDB 和 AOF

二者都是对 Redis 数据的硬件备份, 区别在于
RDB 是定时备份, 二进制格式保存数据
AOF 是实时备份, 文本格式保存数据


RDB(Redis Database)

RDB 持久化是把当前进程数据生成快照保存到硬盘的过程, RDB 持久化的触发过程分为 手动触发和自动触发


RDB 触发机制


手动触发

程序员(人) 通过 redis 客户端, 执行特定命令 (save, bgsave) 来触发快照生成.

  • sava 命令: Redis 主线程停止其他工作, 进行 RDB 过程 (会对 Redis 服务器造成阻塞[单线程模型])
  • bgsave 命令: Redis 进程执行 fork 操作创建子进程, 子进程负责 RDB 持久化过程, 阻塞只发生在 fork 阶段, 不涉及长时间的阻塞 .

bgsave 命令的运行流程
在这里插入图片描述

  1. 执行 bgsave 命令, Redis 父进程会判定其他子进程是否正在执行 (RDB/AOF 子进程), 如果存在则直接返回
  2. 父进程 fork 一个子进程, fork 过程父进程阻塞
  3. 父进程 fork 完子进程后, bgsave 命令返回 “Background saving started” 信息, 父进程不再阻塞, 可以响应其他命令
  4. 子进程创建 RDB 文件, 根据 父进程内存 生成临时快照, 完成后对原有文件进行 替换
  5. RDB 文件替换完成后, 子进程 发送信号 给父进程, 通知父进程 RDB 操作完成, 父进程更新信息

自动触发

通过程序配置的一些设定, redis 依据某些条件自动触发 RDB 持久化操作.

  1. 配置文件中设置触发频率 "save m n " 对应 m 秒内数据集发生了 n 此变化, 就触发 RDB 持久化
  2. 使用 shutdown 命令关闭 Redis, 会执行 RDB 持久化 (service redis-server restart 命令也会触发)
  3. Redis 进行主从复制时, 主节点会生成 RDB 快照, 传输给从节点. (此时也触发 RDB 持久化)

RDB 持久化的优缺点

  • RDB 是二进制文件, 代表 Redis 在某个时刻的数据快照, 适用于备份, 全量复制等场景.
  • RDB 机制 恢复数据速度远远快于 AOF 机制 (RDB 文件以二进制形式存储, AOF 文件以文本文件形式存储, 读 RDB 文件可以按照字节格式取出, 放到对应结构体/对象中, 读 AOF 文件需要进行一系列字符串切分操作 [耗时久 …])
  • RDB 机制在两次生成快照之间, 实时数据可能会丢失(不正常关闭,第二次 快照生成失败)
  • RDB 文件使用 特定二进制 格式保存, 不同版本兼容性有风险

AOF (Append Only File)

AOF 机制就是把用户的 每次操作 , 都记录到一个文件中, 当 Redis 重启的时候, 会读取这个 AOF 文件的内容(一堆操作), 来恢复数据 .

术语一点的说法:
以独立日志的方式记录每次写命令, 重启时重新执行 AOF 文件中的命令以达到恢复数据的目的 .

  • AOF 机制默认关闭, 可通过修改配置文件来开启
  • AOF 优先级高于 RDB, 当 aof 文件和 rdb 文件同时存在时,并且两个机制都启用时, rdb 文件会失效

对 redis.conf 文件进行修改
在这里插入图片描述
在这里插入图片描述


AOF 工作流程

在这里插入图片描述

  1. 所有写入的命令会追加到 缓冲区 (aof_buf) 中
  2. AOF 缓冲区根据对应的策略向硬盘做同步操作
  3. 随着 AOF 文件的越来越大, 定期对 AOF 文件进行重写,压缩
  4. Redis 重启时, 加载 AOF 文件进行数据恢复

AOF 缓冲区

缓冲区: AOF 机制会将用户操作/命令, 先写入到缓冲区, 积累一些后,再统一写入硬盘 AOF 文件末尾

  • 写入缓冲区操作比写入硬盘操作要快
  • 写入 AOF 文件末尾是顺序写入, 要比随机写入要快

缓冲区刷新频率 设置参数

aways : 命令写入缓冲区后直接刷新
everysec : 每秒由同步线程调用刷新操作
no : redis 线程不主动刷新, 由 OS 控制刷新频率

缓冲区刷新频率可通过修改配置文件中的 appendfsync 调整

在这里插入图片描述


AOF 重写机制 rewrite

随着命令不断写入 AOF 文件, 文件会越来越大
于是就需要对其中内容进行整, 剔除冗余操作, 合并修改操作 …
以达到压缩文件体积的效果

AOF 重写流程

在这里插入图片描述

  1. 执行 AOF 重写请求
  2. 父进程执行 fork 创建子进程
  3. 子进程重写 新AOF 文件的同时, 父进程需要往缓冲区中写入新的命令
  4. 新 AOF 文件生成完毕, 子进程发送信号通知父进程
  5. 父进程将缓冲区内容追加到 新的 AOF 文件中
  6. 新 AOF 文件替换旧 AOF 文件
    重写完成

混合持久化

将 RDB 机制和 AOF 机制同时应用, 同时具有二者的优势
通过在 aof文件中 配置文件中修改 aof-use-rdb-preamble yes 来设置

  1. AOF: 以文本方式记录每一个请求/命令
  2. RDB: 重写时以 RDB 二进制格式重写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/532356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索艺术的新领域——3D线上艺术馆如何改变艺术作品的传播方式

在数字化时代的浪潮下,3D线上艺术馆成为艺术家们展示和传播自己作品的新平台。不仅突破了地域和物理空间的限制,还提供了全新的互动体验。 一、无界限的展示空间:艺术家的新展示平台 3D线上艺术馆通过数字化技术,为艺术家提供了一…

Linux函数学习 fork

1、Linux fork 函数 pid_t fork(void); pid_t : 对于子进程,返回0 pid_t : 对于父进程进程,返回子进程进程号 int pipe(int pipefd[2]); pipefd[0] 为读取管道 pipefd[1] 为写入管道 返回值:-1失败 0 成功 2、函…

TMS320F280049 EPWM模块--DB子模块(4)

下图是DB子模块与其他模块的关系图,可以看到DB主要接收AQ的输入,然后输出给PC。 DB内部信号如下图所示,主要由IN_MODE/POLSEL/OUT_MODE来控制。RED/FED/DBCTL可以由影子加载到活动寄存器。 POLSEL可以控制4种pwm输出极性--AHC/ALC/AH/AL&…

LeetCode31. 下一个排列(Java)

题目: 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列…

HEC-HMS水文模型

HEC-HMS是美国陆军工程兵团水文工程中心开发的一款水文模型。HMS能够模拟各种类型的降雨事件对流域水文,河道水动力以及水利设施的影响,在世界范围内得到了广泛的应用。它有着完善的前后处理软件,能有效减轻建模的负担;能够与HEC开…

2023NJU-ICS PA1.2表达式求值 思路详解 心得体会

前言 PA1.2的细节非常非常多,导致这几天花了大量的时间去调试bug,4.3晚上终于过了最后一关“如何测试你的代码”(花了两整天时间才调成功)。虽然耗时巨大,但确实学到了不少东西、训练了能力,于是抽几天时间…

07 Php学习:运算符

PHP 算术运算符 在 PHP 中,算术运算符用于执行基本的数学运算,包括加法、减法、乘法、除法、取余数,负数运算、取反和并置运算。以下是这些运算符的详细解释和示例: 加法运算符 :用于将两个数值相加。 $a 5; $b 3;…

MySQL innoDB存储引擎多事务场景下的事务执行情况

一、背景 在日常开发中,对不同事务之间的隔离情况等理解如果不够清晰,很容易导致代码的效果和预期不符。因而在这对一些存在疑问的场景进行模拟。 下面的例子全部基于innoDB存储引擎。 二、场景: 2.1、两个事务修改同一行记录 正常来说&…

基于ssm乐购游戏商城系统论文

摘 要 随着社会的发展,游戏品种越来越多,计算机的优势和普及使得乐购游戏商城系统的开发成为必需。乐购游戏商城系统主要是借助计算机,通过对信息进行管理。减少管理员的工作,同时也方便广大用户对个人所需信息的及时查询以及管理…

IO流【 文件字符输入、出流;带缓冲区的字符输入、出流;对象流】

day36 IO流 字符流继承图 字符流 继day35 应用场景:操作纯文本数据 注意:字符流 字节流编译器 编译器:可以识别中文字符和非中文字符,非中文字符获取1个字节(一个字节一个字符),编译器会根据…

Electron打包vue+java+nginx 踩坑记录

记录下遇到的问题: ⚠注意:64位系统和32位系统的配置不太一样 1、运行npm run packager失败 原因:在package.json没有对应命令 解决:在package.json 中添加对应命令,其中testApp是你想要的输入的项目名称&#xff0…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型,我们使用通义千问 显存:24G 模型:qwen1.5-7B-Chat,qwen-7B-Chat 先使用 qwen-7B-Chat,会报错用不了: 看了下是不支持这中模型,但看列表中有一个 Qwen 字样…

Asterisk语音卡驱动DAHDI 3.2版本对于TDM410P的支持

目录 DAHDITDM410base.c什么是电话语音卡 资本掌控下的Asterisk虽然继续履行开源社区的承诺,但实际上小手还是会四处乱摸,比如对于Asterisk硬件驱动DAHDI,就做了些隐蔽的小动作。 DAHDI DAHDI 全称是 Digium Asterisk Hardware Device Inter…

xss.pwnfunction-Ugandan Knuckles

这个是把<>过滤掉了所以只能用js的事件 ?weya"onfocus"alert(1337)" autofocus"

不允许在constexpr函数中进行声明

这是我用pycharm在windows系统下复现sfm深度学习网络(Deep Two-View Structure-from-Motion Revisited&#xff09;遇见的问题&#xff0c;复现时有段代码pytorch扩展cuda/c&#xff0c;pycharm中出现C标准相关的报错如下&#xff1a; 在网上查找很久无果&#xff0c;后面通过…

java国产化云HIS基层医院系统源码 SaaS模式

目录 ​ 云HIS开发环境 功能模块介绍&#xff1a; 1、门诊模块 2、住院模块 3、药房、药库模块 ​编辑 4、电子病历模块 5、统计报表模块 6、系统管理模块 系统优势 云his之电子病历子系统功能 云 his 系统是运用云计算、大数据、物联网等新兴信息技术&#xff0c;按…

python爬虫———激发学习兴趣的案列(第十三天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

linux内核驱动-在内核代码里添加设备结点

linux中&#xff0c;一切皆文件 我们在用户层用一些系统函数&#xff08;如&#xff1a;fopen等等&#xff09;时&#xff0c;会进入内核&#xff0c;内核会在字符注册了的设备号链表中查找。如果找到就运行我们写的设备文件的&#xff08;驱动&#xff09;函数 我们在前面已经…

[方案实操|数据技术]数据要素十大创新模式(1):基于区块链的多模态数据交易服务平台

“ 区块链以其公开共享、去中心化、不可篡改、可追溯和不可抵赖等优势&#xff0c;吸引了包括金融业、医疗业和政府部门等众多利益相关方的极大兴趣&#xff0c;被认为是解决数据安全交换问题的合适方案。” 武汉东湖大数据科技股份有限公司凭借基于区块链的多模态数据交易服务…

C语言---顺序表(一)

文章目录 前言1.数据结构1.1.什么是数据结构1.2.为什么需要数据结构&#xff1f; 2.顺序表2.1.顺序表的概念2.2.顺序表分类 3.动态顺序表的实现 前言 在前面20多篇博客中&#xff0c;我们已经学习完了C语言知识&#xff0c;下面我们开启新的一章—数据结构。 1.数据结构 1.1.…