一文读懂redis持久化机制

news2024/9/28 13:16:19

持久化官网相关参考资料
https://redis.io/docs/manual/persistence/

持久化就是把redis内存里面保存的数据保存磁盘中,在redis重启或者能够使得数据不会丢失。目前常用的持久化方式有:RDB方式、AOF方式以及RDB + AOF两种方式

RDB持久化方式

所谓的RDB方式就是通过fork子线程以快照的方式将redis当前内存中的数据写入到硬盘中。

RDB持久化的优点:生成的文件小,备份和恢复速度都很快
RDB持久化的缺点:1、经常需要fork子进程,所以占用CPU会比较高 2、只是进行定期的备份数据,容易造成数据丢失
可以通过dbfilename dump.rdb来指定rdb的文件名,可以通过dir ./ 来配置备份文件保存的路径。RDB保存的策略可以通过下面的配置项来进行配置:

# save 3600 1
# save 300 100
# save 60 10000

此配置也是默认的配置,在3600秒内有一条数据发生改变、300秒内有100条key发生改变、60秒内有10000个key发生改变就会触发备份。

RDB持久化的备份方式:

1、自动触发
达到备份策略条件时候触发

2、手工触发
使用bgsave命令、save命令。不建议使用save命令,因为会阻塞线程

AOF持久化方式

由于RDS持久化方式数据的安全性很低,所以redis还提供另外一种持久化方式AOF。
AOF默认情况下是关闭,如果我们需要开启的时候需要通过下面的配置项打开
即把appendonly 配置值由no修改为yes.
在这里插入图片描述

appendonly yes

AOF的同步机制

在执行修改类的命令时,把命令追加到AOF文件中,如果这样会导致每次命令执行都会与磁盘进行一次交互,这个会严重的影响到性能,所以redis提供了配置项来指定刷盘的时机:

# appendfsync always 表示每次写入都执行fsync(刷新)函数 性能会
非常非常慢 但是非常安全
appendfsync everysec 每秒执行一次fsync函数 可能丢失1s的数据
# appendfsync no 由操作系统保证数据同步到磁盘,速度最快 你的数
据只需要交给操作系统就行

即使用默认的策略会导致有可能1秒左右的数据丢失

aof的重写机制

为什么需要重写呢?
因为我们会在每次更新操作都会记录指令到aof文件中,随着时间的推移该文件会越来越大。所以我们就需要当前内存的数据记录下来,然后把之前的文件删除。
aof的重写流程是什么样的呢?

1. Redis fork一个子进程,在一个临时文件中写入新的AOF (当前内存的
数据生成的新的AOF)
2. 那么在写入新的AOF的时候,主进程还会有指令进入,那么主进程会在
内存缓存区中累计新的指令 (但是同时也会写在旧的AOF文件中,就算
重写失败,也不会导致AOF损坏或者数据丢失)
3. 如果子进程重写完成,父进程会收到完成信号,并且把内存缓存中的指
令追加到新的AOF文件中
4. 替换旧的AOF文件 ,并且将新的指令附加到重写好的AOF文件中。

在Redis4.0以后支持aof重写的时候,以RDB的方式生成新的AOF文件,然后后续的指令还是以aof的方法追加到该文件中,配置的参数是:
混合方式默认是开启的

aof-use-rdb-preamble yes

什么时候会开启AOF的重写

这个也是通过配置项配置,默认情况下,超过64M且到达重写后文件两倍的时候会触发重写,默认的配置如下:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 

AOF的优势与不足

优势

1.安全性高,就算默认的持久化同步机制,也最多只会导致1s丢失。
2.AOF由于某些原因,比如磁盘满了等导致追加失败,也能通过redischeck-aof 工具来修复
3.格式都是追加的日志,所以可读性更高

不足

  1. 数据集一般比RDB大
  2. 持久化跟数据加载比RDB更慢
  3. 重写的时候,因为重写的时候,新的指令会缓存在内存
    区,所以会导致大量的内存使用

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

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

相关文章

实现无间断的自动化:Jenkins与GitLab的定时任务工作流程

简介: Jenkins是一个流行的开源自动化服务器,而GitLab是一个强大的代码托管和协作平台。通过结合Jenkins和GitLab,我们可以建立一个强大的定时任务自动化工作流程,实现代码拉取、构建、测试和部署的自动化。本篇博客将介绍如何使…

大屏数据可视化开源项目

一、DataGear —— 数据可视化项目 官网:DataGear - 开源免费的数据可视化分析平台 DataGear 是一款开源免费的数据可视化分析平台,数据可视化看板。 功能特性: 1、多种数据源,支持运行时接入任意提供 JDBC 驱动的数据库&#…

Web网页端IM产品RainbowChat-Web的v5.0版已发布

一、关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIMSDK(Github地址) 的产品级移动端IM系统)。 ► 详细介绍:http://www.52im.net/thread-248…

Python的pip install安装路径修改

背景 当我们在安装python的依赖包的时候,不知道默认安装在什么位置,或者不想安装在默认的位置,这时候我们可以手动修改pip install的安装位置。 1.打开cmd窗口, 执行python -m site 输入 python -m site 这个命令可以看到目前的USER_BASE和…

HarmonyOS ArkTS Ability内页面的跳转和数据传递

HarmonyOS ArkTS Ability的数据传递包括有Ability内页面的跳转和数据传递、Ability间的数据跳转和数据传递。本节主要讲解Ability内页面的跳转和数据传递。 打开DevEco Studio,选择一个Empty Ability工程模板,创建一个名为“ArkUIPagesRouter”的工程为…

亚马逊美国站 CPC认证-儿童毛绒玩具产品 毛绒玩具的作用

毛绒玩具等毛绒东西,其实能给孩子带来愉快和安全感,接触舒适,是儿童依恋的重要部分。我们常常能见到一些孩子晚上睡觉前一定要搂着毛绒玩具、或者一定要盖着毛绒毯子才能睡,丢掉了毛绒玩具,或者盖了其他布质的被子就会…

vue时间组件重置

<el-form-item label"注册日期" label-width"210px"><el-date-picker clearablev-model"registerTime"type"daterange"range-separator"至"value-format"yyyy-MM-dd"start-placeholder"开始日期&qu…

[论文笔记] Atos: A Task-Parallel GPU Scheduler for Graph Analytics

Atos: A Task-Parallel GPU Scheduler for Graph Analytics Atos: 用于图分析的任务并行 GPU 调度程序 [Paper] [Slides] ICPP’22 摘要 提出了 Atos, 一个特别针对动态不规则应用的任务并行 GPU 动态调度框架. 支持消除依赖关系的应用的任务并行公式来暴露额外的并发性除了…

MacBook苹果笔记本电脑卡顿怎么解决?

MacBook使用时间久了之后很容易出现卡顿的问题。那么出现卡顿的原因有哪些呢&#xff1f;MacBook卡顿怎么处理呢&#xff1f;下面为大家介绍几种可能的解决方案。虽然mac系统相对来说比较稳定&#xff0c;但遇到软件崩溃的情况也会突然卡顿而无法使用。那么&#xff0c;遇上mac…

C#运行程序修改数据后数据表不做更新【已解决】

前言 近日&#xff0c;在使用C#连接数据库的时候&#xff0c;对数据库中的表做更新后&#xff0c;在当前启动项目中去显示表数据时虽然会发生一个更新&#xff0c;但是在结束程序运行后再去观察数据表中的记录时发现并没有发生一个变化&#xff0c;在重复尝试了好几次后还是同样…

【Linux】中不小心误卸载了rpm命令如何恢复?

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 问题复现问题解决方案补全 whereis r…

Mac电脑把位图转换成矢量图的软件

Super Vectorizer for Mac是一款强大的位图转换工具&#xff0c;运行在Mac OS平台&#xff0c;可以轻松将数位图转换为矢量图。 矢量图以其放大后图像不会失真的优点&#xff0c;在社会各处的使用范围越来越广&#xff0c;但是网络上找到的图片又往往是数位图&#xff0c;这时…

【APP Debug抓包工具】Stream - Network Debug Tool

【APP Debug工具】 Stream - Network Debug Tool

Flutter进阶篇-Local Key和Global Key

简介: key是widget、element和semanticsNode的唯一标识&#xff0c;同一个parent下的所有element的key不能重复&#xff0c;但是在特定条件下可以在不同parent下使用相同的key&#xff0c;比如page1和page2都可以使用ValueKey(1) 。 常用key的UML关系图如上&#xff0c;整体上…

阿里云安装2019版sql server服务

1、添加 Microsoft 的 yum 存储库 [rootiZ22312ginudnbnifn438Z ~]# curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo 这里地址一定要选择https://packages.microsoft.com/config/rhel/7/mssql-server-2019…

华为OD机试真题 JavaScript 实现【记票统计】【牛客练习题】

一、题目描述 请实现一个计票统计系统。你会收到很多投票&#xff0c;其中有合法的也有不合法的&#xff0c;请统计每个候选人得票的数量以及不合法的票数。 &#xff08;注&#xff1a;不合法的投票指的是投票的名字不存在n个候选人的名字中&#xff01;&#xff01;&#x…

JavaScript DOM

1、DOM介绍 DOM(Document Object Model)&#xff1a;文档对象模型。 将 HTML 文档的各个组成部分&#xff0c;封装为对象。借助这些对象&#xff0c;可以对 HTML 文档进行增删改查的动态操作。 1.1、Element元素的获取操作 具体方法 方法名说明getElementById (id 属性值)根…

原因分析必知必会的十大要点

原因分析是对选定的现象进行全面深入的研究&#xff0c;找到现象背后的真正原因与深层次原因&#xff0c;然后采取合适的措施纠正问题、预防问题。如果没有找到真正的根因就采取措施&#xff0c;往往事倍功半&#xff0c;浪费了投入。那么在原因分析时&#xff0c;有哪些成功要…

adb 导入导出安卓设备里面的apk和文件

安卓设备上导出apk到电脑 &#xff1a; 第一条指令查&#xff1a;adb shell pm list package -3 //列出所有非系统三方应用如下 package:com.sangfor.vpn.client.phonepackage:com.spd.mdm.other.funcpackage:com.supcon.supplant第二条指令查路径&#xff1a;adb shell pm pa…

容器(第七篇)docker-consul

consul服务器&#xff1a; 1. 建立 Consul 服务 mkdir /opt/consul cp consul_0.9.2_linux_amd64.zip /opt/consul cd /opt/consul unzip consul_0.9.2_linux_amd64.zip mv consul /usr/local/bin/ //设置代理&#xff0c;在后台启动 consul 服务端 consul agent \ -server \…