一篇文章带你了解Redis持久化机制(RDB、AOF)

news2024/11/25 22:33:18

目录

一、简介

什么是持久化?

为什么要持久化?

两种实现方式

二、RDB详解

2.1、介绍

2.2、save指令前后对比

2.3、save指令相关配置

一些设置

RDB快照条件

2.4、RDB第一种方式:手动save

2.5、RDB第二种方式:后台执行(bgsave)

2.6、RDB第三种方式:自动执行

2.7、RDB的优缺点

RDB优点

RDB缺点

三、AOF详解

3.1、介绍

3.2、AOF写数据的三种策略

3.3、AOF重写(手动重写)

3.4、AOF重写(自动重写)

四、RDB与AOF对比


一、简介

什么是持久化?

利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。说白了Redis是基于内存的,快是快,但一关机数据就没了,这样肯定不行啊,所以就要把数据都存在磁盘上,这个操作就叫持久化。

为什么要持久化?

防止数据的意外丢失,确保数据安全性。哪有服务器一宕机数据就没的,这谁还用Redis?

两种实现方式

RDB:是redis的默认持久化机制。RDB相当于照快照,是对 Redis中的数据执行周期性的持久化操作。

AOF:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程。

二、RDB详解

2.1、介绍

RDB:是redis的默认持久化机制。RDB相当于照快照,保存的是一种状态。几十G数据 —>几kb快照。

快照是默认的持久化方式,这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

2.2、save指令前后对比

save命令就可以触发RDB持久化机制,我们发现,只要我们手动的去save,dump.rdb文件里的二进制数据就会发生改变。

save前:

save后:

2.3、save指令相关配置

一些设置

● dbfilename dump.rdb

        说明:设置本地数据库文件名,默认值为dump.rdb

        经验:通常设置为dump-端口号.rdb

● dir

        说明:设置存储.rdb文件的路径

        经验:通常设置成存储空间较大的目录中,目录名称data

● rdbcompression yes

        说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩

        经验:通常默认为开启状态,如果设置为no,可以节省CPU运行时间,但会使存储的文件变大(巨大)

● rdbchecksum yes

        说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行

        经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险

RDB快照条件

1、服务器正常关闭时 ./bin/redis-cli shutdown

2、key满足一定条件,会进行快照

在redis.conf文件中

save 900 1 //每900秒(15分钟)至少1个key发生变化,产生快照

save 300 10 //每300秒(5分钟)至少10个key发生变化,产生快照

save 60 10000 //每60秒(1分钟)至少10000个key发生变化,产生快照

2.4、RDB第一种方式:手动save

我们如果想产生快照,可以手动的去save,就类似于我们用eclipse开发程序的时候,总是习惯的去ctrl+s进行保存。我们发现,每次手动的save,dump.rdb文件就会变化。但这种方式有个弊端,就是执行save命令时会阻塞redis。后面的命令执行不了,万一数据很多,save时间过长,那就很难受了。所以线上环境不建议使用手动save。

2.5、RDB第二种方式:后台执行(bgsave)

用法就是直接输入bgsave命令

发送bgsave指令到redis中,这时redis直接返回给操作者一个Background saving started的信息,在返回信息的时候,抽空调用了linux的fork函数生成一个子进程去创建RDB文件,生成完返回给redis消息。

2.6、RDB第三种方式:自动执行

问题:反复执行保存指令(save或bgsave),忘记了怎么办?不知道数据产生了多少变化,何时保存?

解决方式:自动执行。

例如:配置文件中

save 900 1 //每900秒(15分钟)至少1个key发生变化,产生快照

save 300 10 //每300秒(5分钟)至少10个key发生变化,产生快照

save 60 10000 //每60秒(1分钟)至少10000个key发生变化,产生快照

注意:这种方式启动后执行的是bgsave的操作。

特别注意:如果我们设置每30秒有两个变化就bgsave,配置如:save 30 2

两个相同的set命令也会触发bgsave,也就是说redis是不会给你进行数据比对的,比如我原本有个key叫name,值为gala,那么我们连着两条set name gala,还是会触发bgsave,可以说,只要是写命令都会触发,不用看值是否变化了。

2.7、RDB的优缺点

RDB优点

● RDB是一个紧凑压缩的二进制文件,存储效率较高。

● RDB内部存储的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景。

● RDB恢复数据的速度要比AOF快很多。

● 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复。

RDB缺点

● RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据。

● bgsave指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能。

● Redis的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象。

三、AOF详解

3.1、介绍

AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程。

AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。

3.2、AOF写数据的三种策略

我们先看看AOF将数据写入磁盘的过程。

每有一次写命令就将数据放入缓存区,那么问题来了,AOF存多少数据才同步到AOF文件中呢。

3.3、AOF重写(手动重写)

随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将对同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录。

AOF重写作用:
        降低磁盘占用量,提高磁盘利用率。
        提高持久化效率,降低持久化写时间,提高IO性能。
        降低数据恢复用时,提高数据恢复效率。

AOF重写规则:

        1、进程内已超时的数据不再写入文件

        2、忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令

如del key1、 hdel key2、srem key3、set key4 111、set key4 222等。

        3、对同一数据的多条写命令合并为一条命令,如lpush list1 a、lpush list1 b、 lpush list1 c 可以转化为:lpush list1 a b c。

为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素。

3.4、AOF重写(自动重写)

条件1:当前AOF缓冲区里的数据大小 > 我们设置的auto-aof-rewrite-min-size。

条件2:(当前AOF缓冲区里的数据大小 - 我们设置的基础尺寸) / 我们设置的基础尺寸 >= 我们设置的百分比。

四、RDB与AOF对比

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

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

相关文章

加壳与脱壳,打造铁壁铜墙的Android应用防护境地

加壳和脱壳是什么? Android逆向加壳和脱壳是与Android应用程序安全相关的概念。 逆向加壳(Reverse Engineering with Packing):逆向加壳是指在给定的Android应用程序中,通过添加一个或多个防护层或加密算法来增加应用…

AI2:仅凭开源数据,可达ChatGPT 83%表现

夕小瑶科技说 原创 作者 | Python ChatGPT强大的性能让人爱不释手,ChatGPT迟迟不开源让人恨得牙根痒痒。那仅通过开源数据,能够取得怎样的效果呢?近期,AI2的一篇论文显示,最好的65B规模的模型能够达到ChatGPT表现的8…

设计一个feed流系统

什么是feed流系统 移动互联网时代,Feed流产品是非常常见的,如朋友圈、微博、抖音等,除此之外,很多App的都会有一个模块,要么叫动态,要么叫消息广场,这些也是Feed流产品。只要大拇指不停地往下划…

【机器学习】十大算法之一 “决策树”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

截至目前最强的70亿参数大语言模型:开源可商用的RedPajam 7B完全版发布!

RedPajama模型是TOGETHER发布的一个开源可商用的大模型。2023年6月6日,TOGETHER在官方宣布该模型完成训练,经过测试,该模型目前超过所有7B规模的大模型,比LLaMA-7B和Falcon-7B的效果还要好! TOGETHER公司是一家由豪华管…

HDMI之HDCP

概述 HDCP 1.4第1阶段 HDCP 1.4第2阶段 只有REPEATER设备,此阶段才会出现。 HDCP 1.4第3阶段 本文以Repeater为例,连接方式Source[Tx]=>[Rx]Repeater[Tx]=>[Rx]Sink。讲解一下HDCP1.4的通信过程。 设置SCDC 设置TMDS Configuration Rx W A8 20 00 Rx W A8 20 R …

云安全与云渗透

一、引言 随着技术的进步,云计算已成为信息技术领域的主流趋势。企业和个人都在利用云服务实现数据存储和处理的便利,但同时也带来了一系列的安全问题。对于这些问题,我们需要深入理解云安全和云渗透的重要性。本文将详细探讨这两个主题。 …

Leetcode之哈希查找

1. 哈希查找 本质上就是个搜索,但是可以将在一个集合中查找一个元素的时间复杂度降低到O(1)。python中常用的有以下方式: setdict数组模拟 2. 相关算法题 2.1. Leetcode 771 宝石与石头 题目链接题目描述 给你一个字符串 jewels 代表石头中宝石的类…

Java 图片渲染到前端,向前端一次返回多张Base64图片

文章目录 前言图片渲染到前端向前端一次返回多张Base64图片 前言 当我们从服务器读取的图片链接返回给前端,前端可以很轻松的下载和展示,但是对于临时文件,我们不需要保存到服务器,比如PPT转图片,PDF转图片等等&#…

数据结构--》从线性表说起,掌握常用基础算法

目录 初识线性表 线性表的基本操作 顺序表的定义 顺序表的基本操作 单链表的定义 单链表的基本操作 双链表的介绍 循环链表的介绍 静态链表的介绍 初识线性表 线性表是具有相同数据类型的 n (n0) 个数据元素的有限序列,其中n为表长,当n0时线性…

mysql 将date字段默认值设置为CURRENT_DATE

我们是否可以在mysql中,将Date字段的默认值设置为CURRENT_DATE(当前日期)? 答案是8.0之前不可以,8.0.13之后可以。 比如在5.7版本中使用如下sql创建表,将会提示语法错误: CREATE TABLE t_order (id bigi…

CentOS 7远程登录jupyter lab

使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 python3 --version看一下python的版本,pip3 --version看一下pip的版本,这是我CentOS 7默认安装好的。 pip3 install jupyterla…

ASEMI代理光宝高速光耦LTV-M601参数,LTV-M601图片

编辑-Z LTV-M601参数描述: 型号:LTV-M601 平均正向输入电流IF:20mA 反向输入电压VR:5V 功耗PI:40mW 输出集电极电流IO:50mA 输出集电极电压VO:7V 输出集电极功耗Po:85mW 电…

【C++从入门到放弃】stack和queue的深度剖析及空间适配器的介绍

🧑‍💻作者: 情话0.0 📝专栏:《C从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! stack…

SMT车间贴片机Feeder管理方案

Feeder(飞达或供料器)是电子厂SMT车间贴片机上一个重要的部件,它的可用状态关系着贴片机生产的质量的稳定性,如何有效率的管理是每一位车间主管人员不可忽视的问题。根据行业协会大数据的分析发现导致贴片机大约30%的损失时间及1%的物料浪费都是因为Feed…

【Leetcode60天带刷】day14二叉树——144.二叉树的前序遍历,145.二叉树的后序遍历,94.二叉树的中序遍历

题目: 144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3&#x…

5.4.1 虚拟专用网VPN

5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议(5.3.1 因特网的路由协议(一)、5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议、5.3.3 因特网的路由协议(三)OSPF协议、5.3.4 因特…

【Docker】Docker的优势、与虚拟机技术的区别、三个重要概念和架构及工作原理的详细讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

开利网络赋能祥兴事业集团推动乡村振兴数字化转型

近日,开利网络到访柳州祥兴实业集团,就即将举办的广西文旅大会数字化部署进行跟踪落地。以“祥兴百朋荷苑”为用户端,祥兴集团针对百朋景区实施了全流程的数字化系统构建,包含景区统一收银、景区导览导航讲解及扫码点餐、预约核销…

Winform模拟Visual Studio工具栏拖拉拽、停靠

背景 随着公司接的业务复杂度提高,软件界面设计需求也相应提升,老板不再满足于单面板的各种跳转,所以明白了吧,不提升自己就等于自愿失业或转行!!! 方案 本来想着自学自写一套控件库来实现&a…