详细介绍Redis RDB和AOF两种持久化方式

RDB持久化

RDB是Redis的一种快照持久化方式,它将内存中的数据集都写入磁盘,生成一个RDB文件,RDB文件是一个经过压缩的二进制文件(通常叫做数据快照),可以用于备份、迁移和恢复数据。

RDB的优点是快速、紧凑,适合备份和恢复大量数据,但是它的缺点是数据可能会丢失,因为RDB文件只保存了最后一次快照的数据

执行时机

RDB持久化在以下四种情况下会执行:

1. 执行save命令(Redis持久化命令):

当执行save命令时,Redis会阻塞所有客户端请求,将内存中的数据集快照写入磁盘,生成一个RDB文件。这个过程会阻塞Redis的正常运行(无法响应客户端请求,造成服务中断),保存完成后,Redis会解除阻塞,继续处理客户端请求。

2. 执行bgsave命令(后台持久化命令):

bgsave命令的执行过程中,Redis会先创建一个子进程,然后父进程继续处理客户端请求,而子进程负责将数据集保存到磁盘。这种方式可以保证Redis的正常响应,不会中断服务。 由于bgsave命令是在后台执行的,所以在执行期间无法立即得知保存的进度和结果,可以通过lastsave命令或者检测RDB文件判断保存情况。

3. Redis停机

当Redis服务停机时,无论是正常关闭还是异常退出,都会触发RDB持久化,Redis会执行一次save命令,将数据集快照写入磁盘。

4. 触发RDB条件

用户可以通过设置配置文件(redis.conf)中的save命令来指定触发RDB持久化的条件,

例如:设定在900秒内至少有1个键被修改,就执行一次bgsave命令(如果是save "" 则表示禁用RDB)

# redis.conf文件

save 900 1 

执行原理

bgsave开始时会fork主进程得到子进程(和主进程相同),子进程共享主进程的内存数据,负责将内存中的数据集写入磁盘。

fork命令使用了写时复制(Copy-on-Write)的技术:在主进程执行写操作时,才会真正复制父进程的内存页,而在此之前,子进程与父进程共享相同的内存页,这样可以减少内存的复制开销,提高性能。

AOF持久化

在Redis每次写入操作执行完成后,将该操作以文本的形式追加到AOF文件的末尾,AOF文件是一个文本文件,记录了所有写入操作的历史(也就是记录写操作的命令),可以用于数据恢复。

AOF的执行时机是由Redis自动触发的,由刷盘策略决定。

开启AOF方式方法,修改配置文件redis.conf(不需要关闭RDB,二者可以同时使用)

# redis.conf文件

# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF 3种刷盘策略

刷盘策略刷盘时机优点缺点
always每次写入操作数据安全性最高,几乎不会丢数据性能开销较大
everysec每秒刷盘数据安全较高,性能相对较好性能适中
no操作系统决定刷盘时机性能开销最小数据安全性较低

文件配置

# redis.conf文件(三个选一个)
appendfsync always 
# appendfsync everysec 
# appendfsync no

二者对比

- RDB是快照形式的持久化方式,将数据集的快照以二进制形式保存在磁盘上,而AOF是将写入操作以追加的方式记录到文件中。

- RDB持久化生成的文件较小,加载速度较快。AOF持久化生成的文件较大,加载速度较慢,但可以提供更好的数据安全性。

- RDB持久化可以定期或手动触发,而AOF持久化可以根据不同的刷盘策略进行配置

- RDB持久化对Redis的读取性能没有影响,因为数据是从磁盘加载到内存中,而AOF持久化在写入性能上可能会有一定影响,因为每次写入操作都需要追加到文件中。

- RDB持久化在故障恢复时速度较快,因为只需加载最近的RDB文件即可,而AOF持久化在故障恢复时可能需要较长时间,因为需要重新执行AOF文件中的所有写入操作。

总结:RDB适合备份和恢复大量数据,加载速度快;AOF提供更好的数据安全性,但文件较大且加载速度较慢。

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

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

相关文章

Java之线程池的详细解析

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定义在了java.lang.Thread.Stat…

【并发编程】ThreadPoolExecutor任务提交与停止流程及底层实现【新手探索版】

文章目录 1. ThreadPoolExecutor任务提交2. 线程池状态[这部分是难点呀]2.1. addWorker添加worker线程2.2. 内部类Worker2.3. runWorker():执行任务2.4. getTask():获取任务2.5. processWorkerExit():worker线程退出 3.3. 关闭线程池3.3.1. shutdown方法3.3.2. shutdownNow方法…

密码技术 (2) - 公钥密码

一. 前言 公钥密码的秘钥分为加密秘钥和解密秘钥,加密秘钥成为公钥,解密秘钥成为私钥,公钥和私钥的成对存在的,一对公钥和私钥称为密钥对。发送消息时,发送者用公钥对消息进行加密,接收者用私钥进行解密。从…

golang官方限流器rate

包名:golang.org/x/time/rate 实现原理:令牌桶 package mainimport ("context""fmt""testing""time""golang.org/x/time/rate" )func TestLimiter(t *testing.T) {// 第一个参数代表速率&#xff1…

工厂与观察者模式

工厂模式介绍 通过一个加工厂,在这个工厂中添加对应材料,我们就可以得到想要的东西,在程序设计中,这种模式就叫做工厂模式,工厂生成出的产品就是某个类的实例,也就是对象。 关于工厂模式一共有三种&#…

小程序与uniapp如何进行传参

小程序和uniapp都可以通过以下方式进行传参: query参数传递:在url中添加query参数,如在小程序中通过wx.navigateTo或wx.redirectTo跳转页面时可传递query参数,在uniapp中通过uni.navigateTo或uni.redirectTo跳转页面时也可以传递q…

Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem

二维矢量动画智能制作软件开发合集 链接:软件开发技术分享及记录合集 个人开发二维矢量动画智能制作软件界面如下: 目录 一、图片序列图层原理 二、图片序列图层代码实现 三、图片序列图层软件测试视频 结束语 一、图片序列图层原理 本软件的11种…

C++11(列表初始化,声明,范围for)

目录 一、列表初始化 1、一般的列表初始化 2、容器的列表初始化 二、声明 1、 auto 2、decltype 3、nullptr 三、 范围for 一、列表初始化 1、一般的列表初始化 在C98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 int main() {…

【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究

前言 随着金秋时节的来临,国庆和中秋的双重喜庆汇聚成一片温暖的节日氛围。在这个美好的时刻,我们有幸共同迎来一次长达8天的假期,为心灵充电,为身体放松,为未来充实自己。今年的国庆不仅仅是家国团聚的时刻&#xff…

scala基础入门

一、Scala安装 下载网址:Install | The Scala Programming Language ideal安装 (1)下载安装Scala plugins (2)统一JDK环境,统一为8 (3)加载Scala (4)创建工…

LabVIEW学习笔记五:错误,visa关闭超时(错误-1073807339)

写的串口调试工具,其中出现了这个错误 这是串口接收的部分,如果没有在很短的时间内收到外界发进来的数据,这里就会报错。 先在网上查了一下,这个问题很常见,我找到了官方的解答: VISA读取或写入时出现超时…

【JavaEE】CSS

CSS 文章目录 CSS语法引入方式内部样式表行内样式表外部样式 选择器基础选择器标签选择器类选择器id选择器通配符选择器 复合选择器后代选择器伪类选择器链接伪类选择器 字体设置设置文本颜色粗细样式文本对齐 背景背景颜色背景平铺背景尺寸 圆角矩形元素显示模式块级元素 盒模…

Pikachu靶场——XXE 漏洞

文章目录 1. XXE1.1 查看系统文件内容1.2 查看PHP源代码1.3 查看开放端口1.4 探测内网主机 1. XXE 漏洞描述 XXE(XML External Entity)攻击是一种利用XML解析器漏洞的攻击。在这种攻击中,攻击者通过在XML文件中插入恶意实体来触发解析器加载…

计算机图像处理-高斯滤波

高斯滤波 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到…

1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串

1340. 跳跃游戏 V 核心思想:动态规划记忆化搜索。定义dfs(i),表示从i开始最多可以访问多少个下标,然后统计往左跳和往右边跳的最大值,思路其实比较简单,但是代码我感觉还是不太好想。 2039. 网络空闲的时刻 核心思想…

W5100S_EVB_PICO快速入门之MQTT篇(十二)

目录 1. 前言 2. MQTT介绍 2.1 什么是mqtt? 2.2 特点 2.3 应用场景 2.4 MQTT协议实现方式 3. 硬件及接线方式 3.1 硬件准备 3.2 硬件介绍 3.3 接线图 4. 测试 4.1 MQTT测试流程图 4.2 相关代码 4.3 测试现象 5. 相关链接: 1. 前言 随着物…

蓝桥等考Python组别十级002

第一部分:选择题 1、Python L10 (15分) 已知s = Good Luck,下列说法正确的是( )。 s[0]对应的字符是os[2]对应的字符是os[-1]对应的字符是cs[4]对应的字符是L正确答案:B 2、Python L10 (15分) 运行下面程序,输入字符串“pencil”,输出的结果是

vue下载在前端存放的pdf文件

vue下载在前端存放的pdf文件 注意,这里要在public文件夹中新建文件夹存放静态资源,不能在src文件夹中新建文件夹存放静态资源,因为public文件夹中的文件资源不会被npm run build打包编译。大家打包一下,就会发现 模板.pdf文件 是存…

【C++入门指南】类和对象(上)

【C杂货店】类和对象(上) 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1 访问限定符4.2 封装 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储规则7.2 例题7.3结构体内存对齐规则 八、this指针8.2 t…

R语言对加载的数据归一化

# 自定义归一化函数 custom_normalize <- function(x) {# 在这里编写你的归一化逻辑normalized <- (x - min(x)) / (max(x) - min(x))return(normalized) }# 加载CSV数据 data <- read.csv("your_data.csv", header TRUE)# 应用自定义归一化函数 data_scal…