Redis 持久化详解

AOF 持久化

AOF持久化数据恢复相对RDB慢,文件也更大,但数据丢失的风险更小。

AOF 写入

将数据写入Redis内存后,将写数据的命令记录到AOP磁盘文件。

【结构】server.aof_buf

主线程写操作执行完之后,命令会先追加到 Redis 的 server.aof_buf 缓冲区。

【方法】write()

将 server.aof_buf 内的数据写入操作系统内核的文件缓冲区 page cache。(此时还没有写入到硬盘)

【参数】appendfsync

设置AOF刷盘策略。

  • Always:每次写操作命令执行完后,不仅过文件缓冲区,直接同步将 AOF 日志数据写回硬盘;
  • Everysec:每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,然后每隔一秒将缓冲区里的内容写回到硬盘;
  • No:意味着不由 Redis 控制写回硬盘的时机,转交给操作系统控制写回的时机,也就是每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,再由操作系统决定何时将缓冲区内容写回硬盘。

Redis2.6 追加了 lazyfree 线程,先将AOF刷盘任务存在阻塞队列 BIO_AOF_FSYNC,由后台线程逐步完成。

AOF 重写

【参数】auto-aof-rewrite-min-size

由于AOF是以追加命令的方式记录的,文件大小达到阈值时需要进行AOF重写来缩小文件体积。

【方法】folk()

主进程调用 folk() 方法生成 bgrewriteaof 子线程重写AOF文件,具体就是逐一把内存数据的键值对转换成一条命令,再将命令记录到重写日志,誊录完覆盖原有的AOF日志。

子进程与主进程共享内存,且对内存只进行读操作。如果父子进程在重写过程中修改了数据,会发生写时复制,进程之间有独立的数据副本,会先复制一份物理内存,不需要加锁来保证数据安全。

【结构】重写缓冲区

AOF重写期间主进程执行的新命令由于独立的数据副本不会抄录到AOF中,主进程会先存在重写缓存区中。

这期间主进程的工作包括:执行客户端的命令,将执行后的命令写到AOF缓冲区以及AOF重写缓冲区。

AOF重写完成后,会向主进程发送信号,这时主进程会将重写缓冲区内的数据写入AOF,并将新的AOF文件替换原来的。(注意此时如果重写缓冲区数据较多可能会阻塞主进程

RDB持久化

内存数据的全量快照,加载比较快,数据量也更小,但由于是全量,不可能像AOF一样秒级存储,相对来说RDB丢失数据的风险更大。

生成RDB文件

【命令】save 主线程同步生成RDB文件

【命令】bgsave 创建子进程来生成RDB文件,避免阻塞。

【参数】save 300 10 300 秒之内,对数据库进行了至少 10 次修改。

bgsave的子进程赋值数据与AOF重写是类似的,主进程要修改此时共享的内存里的数据,发生写时复制,这块物理内存会被复制一份,主进程在数据副本中操作,子进程还是把原有的数据进行快照保存。

但RDB不想AOF会有重写缓冲区来抄录这段时间产生的新数据,在下次RDB文件抄录前如果发生崩溃,数据将会丢失

写时复制的存在,极端情况下,会使得内存占用为原来的2倍。且写时复制需要由主进程来复制一份数据副本,如果是大key,将可能阻塞主进程。

RDB和AOF混合持久化

AOF重写时和RDB很像,是全量数据保存(只不过RDB保存的数据,AOF保存的是命令),可以采用混合持久化。

【参数】aof-use-rdb-preamble yes

用于开启混合持久化。

原先抄录内存中所有的数据转为命令保存到AOF文件的操作变为用RDB快照写入AOF,这期间主进程执行的写操作产生的新数据依旧会存在重写缓冲区内,以增量数据的形式填充到AOF,再替换旧的AOF文件。

这样重启时数据加载会很快,数据丢失的也更少。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启智集装箱箱号自动识别API,简单易挂接

启智集装箱箱号自动识别技术特点: 1、集装箱箱号自动识别速度快,毫秒级识别速度; 2、识别率高:综合识别率达到99%以上; 3、集装箱箱号自动识别种类多:能够识别GB/T1836-1997标准的集装箱号码,可…

论文阅读——Design of Environmental backscatter tag antenna for 5G Internet of things

文章目录 摘要一、背景二、系统模型三、天线设计A. 指标B. 天线结构描述C. 天线结构优化D. 天线结构确定 四、仿真结果总结 论文来源:https://ieeexplore.ieee.org/document/9379395 摘要 文章针对传统设备识别在电力物联网场景中存在的可靠性低和读取距离不足的问…

Java智慧养老养老护理帮忙代办陪诊陪护小程序系统源码

🌟智慧养老新风尚,护理代办陪诊小程序来帮忙✨ 🏡【开篇:关爱老人,从智慧养老开始】🏡 随着社会的进步,智慧养老已成为新时代孝心的体现。面对忙碌的生活节奏,如何更好地照顾家中长…

postMessage 收到消息类型 “webpackWarnings“

场景描述: 当A系统中的parent页面使用iframe内嵌C系统的child页面,并且在parent页面中通过postMessageg给child页面发送消息时,如果C系统中使用了webpack,则webpack也会给child页面发送消息 ,消息类型为webpackWarnings。那么如何…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

右手系转Unity左手系坐标系

右手系转Unity左手系坐标系 inline Sophus::SE3d TransformRightPoseToLeftUnity(const Sophus::SE3d &pose) {Eigen::Matrix4d T_wl_wr, T_br_bl;T_wl_wr.setZero();T_wl_wr(0, 0) 1.0;T_wl_wr(1, 2) 1.0;T_wl_wr(2, 1) 1.0;T_wl_wr(3, 3) 1.0;T_br_bl.setZero();T_b…

电力系统 | 发电、输电、变电、配电、用电介绍 | 一度电从电厂发出来到用户终端需要经历哪些环节 | 变电站建在哪里

文章目录 一、一度电从电厂发出来到用户终端需要经历哪些环节?二、发电、变电、输电、配售电和用电过程介绍三、变电站建在哪里? 一、一度电从电厂发出来到用户终端需要经历哪些环节? 电力系统是由发电、变电、输电、配售电和用电等环节组成的…

《路过人间》好好听,歌词也戳人

嘿 意不意外 她背影 那么轻快 嘿 要明白 人会来 就会离开 世上唯一不变 是人都善变 路过人间爱都有期限 天可怜见 心碎在所难免 以为痛过几回 多了些修炼 路过人间就懂得防卫 说来惭愧人只要有机会 就又沦陷 嘿 别再猜 她可曾 想过回来 嘿 醒過來 你很好 她也不壞 快快抹干…

阿里云服务器 篇六:GitHub镜像网站

文章目录 系列文章搭建镜像网站的2种方式使用 Web 抓取工具 (Spider 技术)使用 Web 代理服务器使用 nginx 搭建GitHub镜像网站基础环境搭建添加对 github.com 的转发配置添加对 raw.githubusercontent.com 的转发配置配置更改注意事项(可选)缓存优化为新增设的二级域名配置DN…

leetcode106. 从中序与后序遍历序列构造二叉树,力扣105姊妹题

leetcode106. 从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…

活动报名小程序

#活动报名工具# # 活动报名小程序 ## 项目简介 一款通用的活动报名工具,包含活动展示,微信支付,订单管理,分享评价等功能。 品客聚精彩,有你才精彩!不只有线下活动还可以进行线上裂变活动。 …

UE4-构建光照后导入的静态网格体变黑

当我们将我们的静态网格体导入到项目当中的时候,此时我们进行重新构建光照,我们在从新构建完光照后,会发现我们的静态网格体全部变黑了,此时是因为没有设置光照贴图分辨率和坐标索引引起的。 将General Settings中的L…

Cmake生成的Xcode工程相对路径与绝对路径的问题

Cmake生成的Xcode工程相对路径与绝对路径的问题 文章目录 Cmake生成的Xcode工程相对路径与绝对路径的问题前言修改.pbxproj文件验证工程小结 前言 由于Cmake的跨平台的自动化构建的方便性以及他广泛应用于编译过程的管理,在开发过程中难免用到Cmake。我也使用Cmake…

framework直播学习笔记--安卓如何实现Launcher启动应用全部变自由窗口Freeform模式

背景: 前些天在学员在学员群里有聊到一个需求,那就是把手机桌面点击应用图标后,不是进行全屏显示,而是都进行自由窗口显示。这个其实有点类似我们windows电脑打开app,每个app都是一个非全屏的窗口,而且可以…

从 Batch Norm 到 SGD 隐藏的内容

我们仍然不了解机器学习的哪些方面 欢迎来到雲闪世界。令人惊讶的是,机器学习中的一些基本主题仍然不为研究人员所知,尽管它们很基础且常用,但却似乎很神秘。机器学习的有趣之处在于我们构建了可以工作的东西,然后弄清楚它们为什么…

Vue中 watch 与 watchEffect 的区别

Watch 默认是懒侦听,即仅在侦听源发生变化时才执行回调函数。只追踪明确定义的数据源,不会追踪在回调中访问到的东西可以访问侦听数据的新值和旧值。总共接收三个参数,侦听数据源、回调函数和配置选项。 const x ref(1) const y ref(1) c…

硅纪元视角 | 摩根大通拥抱AI:LLM Suite开启金融行业新篇章!

在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…

华为OD机试 - 计算三叉搜索树的高度 (python 2024年C卷D卷)

华为OD机试(C卷D卷)2024真题目录(Java & c & python) 题目描述 定义构造三叉搜索树规则如下: 每个节点都存有一个数,当插入一个新的数时,从根节点向下寻找,直到找到一个合适的空节点插入。查找的…

【字母异位词分组】python刷题记录

R2-字符串篇 class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:#哈希表分组#把每种字母出现次数相同的字符串分到同一组#sort一下好像能分dictdefaultdict(list)for s in strs:asorted(s)#sorted(s)相同的字符串分到同一组dict[.join(a)].appen…

Java 基础 and 进阶面试知识点(超详细)

一个 Java 文件中是否可以存在多个类(修饰类除外)? 一个 Java 文件中是可以存在多个类的,但是一个 Java 文件中只能存在一个 public 所修饰的类,而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…