十.Redis持久化

news2024/11/13 12:41:05

十.Redis持久化

      • 一:RDB持久化
      • 二:AOF持久化
      • 三:扩展

redis持久化
Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么服务进程退出,服务器中的数据库状态也会消失,所以Redis提供了持久化功能。

redis提供了如下两种持久化:

一:RDB持久化

在这里插入图片描述

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,他恢复时是将快照文件直接读到内存里。

redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进程任何IO操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。默认方式就是RDB,一般情况不需修改这个配置。

rdb保存的文件是dump.rdb
在这里插入图片描述
在这里插入图片描述
触发机制:
1.配置中save的规则满足的情况下,会自动触发rdb规则
2.执行flushall命令,也会触发我们的rdb规则
3.退出redis,也会产生rdb文件
持久化就会自动生成一个dump.rdb
在这里插入图片描述
如何恢复rdb文件:
1.只需要将rdb文件放在我们redis启动目录就可以了,redis启动的时候会自动检查dump.rdb恢复其中的数据。
2.命令查看存放位置

127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/redis-6.2.11/bin" #如果在该目录下存在dump.rdb文件,启动就会自动恢复其中的数据
127.0.0.1:6379> 

rdb优点:
1.适合大规模的数据恢复
2.对数据的完整性要求不高
rdb缺点:
1.需要一定的时间间隔进行操作,如果redis意外宕机,这最后一次修改的数据就没有了
2.fork进程的时候,会占用一定的内存空间

二:AOF持久化

aof持久化即将redis所有的非读命令记录下来,恢复的时候就把这个文件中命令全部执行一遍。
在这里插入图片描述
以日志的形式来记录每个写操作,将redis执行过的所有指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,即redis重启的话就根据日志文件的内容将写指令从前到后执行一次来完成数据的恢复。
Aof保存的是appendonly.aof文件
在这里插入图片描述
AOF持久化默认是关闭的,如需开启在配置文件中将appendonly改为yes,然后保存文件后重启redis即可。

如果这个aof文件中有错误,这个时候redis是无法启动的,我们需要修复这个aof文件,redis在bin目录下提供了一个工具,在bin下执行如下即可:
redis-check-aof --fix appendonly.aof

重写规则:
aof默认就是文件的无限追加,文件会越来越大
在这里插入图片描述
如果aof文件大于64mb,就会新建一个进程来将aof文件进行重写。

优缺点:

# 配置持久化同步sync的选项(持久化策略),默认是everysec每秒同步一次

# 每次修改都会同步sync ,这种方式比较耗性能
# appendfsync always

# 每一秒执行一次同步sync,可能会丢失这1s的数据。
appendfsync everysec

# 不执行同步sync,这个时候操作系统自己同步数据,速度最快。
# appendfsync no

优点:
1.每一次修改都同步,文件的完整性会更好。
2.每秒同步一次,可能会丢失一秒的数据
3.从不同步,效率最高
缺点:
1.相对于数据文件来说,aof远远大于rdb,修复速度比rdb慢
2.aof运行效率也比rdb慢,所以redis默认配置就是rdb持久化

三:扩展

1.RDB持久化方式能够在指定的时间间隔内对数据进行快照存储
2.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
3.只做缓存,如果只希望数据在服务器运行的时候存在,也可以不使用任何持久化
4.同时开启两种持久化方式

  • 在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整。
  • RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件,那要不要只使用AOF?建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),能快速重启,而且不会有AOF可能潜在存在的BUG,留着作为一个万一的手段。

5.性能建议

  • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则
  • 如果Enable AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了,代价一是带来了持续的IO,二是AOF rewrite 的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上,默认超过原大小100%大小重写可以改到适当的数值。
  • 如果不Enable AOF,仅靠Master-Slave Repllcation实现高可用性也可以,能省掉一大笔IO,也减少了rewrite时带来的系统波动。代价是如果Master/Slave同时宕掉,会丢失十几分钟的数据,启动脚本也要比较两个Master/Slave中的RDB文件,载入较新的那个,微博即是这种架构。

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

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

相关文章

《Spring系列》第18章 监听器Listener

前言 陆续阅读了Spring Boot源码中,有不少地方都用到了监听器。每次看到监听器的代码都一头雾水,不懂其中的设计理念,这次决定肝一篇监听器的博文。 一、监听器 1.概述 何为监听器?就是用来监听程序执行的。监听器可以做什么事…

青岛大学_王卓老师【数据结构与算法】Week05_03_队列的定义和特点_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

Vue3通透教程【十七】Vite构建TS版本Vue项目

文章目录 🌟 写在前面🌟 创建TS版本的Vue3项目🌟 插件安装🌟 写在最后 🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章&#…

DocFastSearchTool(文档快速搜索工具)开发日志

目录 项目介绍 项目调研背景 项目需求分析 开发环境 项目涉及基础知识点 项目设计 设计基础 项目框架or架构 项目框架的搭建 系统工具模块--遍历目录 SQLite数据库 在Windows上安装SQLite SQLite命令 SQLite-C/C的API 安装SQLite源码 数据库操作的重要接口 连接…

PB从入坑到放弃(三)数据窗口

PB从入坑到放弃(三)数据窗口 写在前面一、 数据窗口画板1.1 Design 视窗1.1.1 General tab页设置1.1.2 Generation tab页设置1.1.3 Prefixes tab页设置 1.2 Preview 视窗1.2.1 查找数据1.2.2 翻页1.2.3 增加、删除数据 1.3 Control List 视窗1.4 Data 视…

学生成绩分析项目

数据采集 导入必要的库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns加载数据集 df pd.read_csv(D:\\桌面\\数据\\student_marks.csv)显示数据框的前几行 # 显示数据框的形状 print("Shape of the dataframe:", df.shape)#显示…

pycharm最新版默认菜单栏等工具不见了

原因 pycharm2022.3新版本,默认使用新UI(如下图),这让很多小伙伴来说不太适应,我还是习惯旧版本的界面。在网上搜了许多恢复旧版本界面的教程,说的解决方案都是由于“手贱把菜单栏给隐藏了”,这…

C语言“教父“

在中国,"C语言教父"一般指的是C语言网的创始人黄老师。他通过C语言网为广大学习者提供了丰富的学习资源和知识分享平台,包括大量的C语言教程、C语言题目以及相应的文档、资源等等,为C语言的推广、教学做出了巨大的贡献和推动作用

Go自带库的使用说明

Go 中的时间操作 Golang中与时间有关的操作,主要涉及到 time 包,核心数据结构是 time.Time,如下: type Time struct {wall uint64ext int64loc *Location }1、获取时间相关函数 1.1 获取当前时间 // 返回当前时间&#xff0c…

腾讯云TRTC服务实现小程序语音/视屏会议

腾讯云TRTC服务的入门 TRTC 是腾讯云主打全平台互通的多人音视频通话和低延时互动直播解决方案。TRTC服务有多种客户端的支持,对于IOS、Android、React native等都支持的比较好,我们主要在于 IOS、Android、Web三端进行处理,其中 TRTC Web S…

HarmonyOS学习路之开发篇—流转

流转概述 介绍 随着全场景多设备生活方式的不断深入,用户拥有的设备越来越多,每个设备都能在适合的场景下提供良好的体验,例如:手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备…

网络变压器常见封装

1、单口千兆(Single Port) 封装类型常见型号Dimension SMD24_1 PIN Pitch:1.00 Length:15.1 Width:7.1/10.0 Height:6.00 JWD: SG24002G Group-tek: HST-24015SR SMD24_2 PIN…

pyspark

连接命令: pyspark --master spark://node1:7077 一个application 大任务可以分解成 多个小任务 jobs, 一个job又可以分解成多个 stages 阶段, 一个stage又可以分解成 多个tasks(可以认为是两个线程) standalone Zo…

使用Gradio库创建交互式滑块组件

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

QT DAY3

完善文本编辑器 1.mainwindow.h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QDebug> #include <QIcon> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QMessageBo…

如何用Stable Diffusion模型生成个人专属创意名片?

目录 1 什么是二维码&#xff1f;2 什么是扩散模型&#xff1f;3 Stable Diffusion环境搭建4 开始制作创意名片结语 1 什么是二维码&#xff1f; 二维码是一种用于存储和传输信息的方便而广泛使用的图像编码技术。它是由黑色方块和白色空白区域组成的二维图形&#xff0c;可以…

光镊背后的电磁理论 | 涡旋电磁波在无线通信系统中的应用

2018年诺贝尔物理学奖于北京时间10月2日17点50分正式揭晓&#xff0c;发明光镊技术的美国物理学家&#xff0c;阿瑟阿什金&#xff08;Arthur Ashkin&#xff09;&#xff0c;以及开创了啁啾脉冲放大技术的唐娜斯特里克兰&#xff08;Donna Strickland&#xff09;、 热拉尔穆鲁…

持之以恒,安之有度 | 持安科技2周年!

新征程 新未来 持安的同学们已经一起走进 第三个年头啦 近日&#xff0c;持安 北京 上海 深圳 所有公司成员齐聚一堂 共 同 庆 祝 持安科技 成立2周年 持安一体化零信任平台 &#xff0c;引领应用层零信任落地新局面 2021年&#xff0c;何艺&#xff08;持安创始人兼CE…

经典轻量级神经网络(3)ShuffleNet V1及其在Fashion-MNIST数据集上的应用

经典轻量级神经网络(3)ShuffleNet V1及其在Fashion-MNIST数据集上的应用 1 ShuffleNet V1的简述 ShuffleNet 提出了 1x1分组卷积通道混洗 的策略&#xff0c;在保证准确率的同时大幅降低计算成本。 ShuffleNet 专为计算能力有限的设备&#xff08;如&#xff1a;10~150MFLOP…

开发uniapp苹果app,苹果签名证书的创建方法

在uniapp云打包界面&#xff0c;打包苹果app&#xff0c;需要私钥证书p12文件&#xff0c;还需要证书profile文件和证书密码。 这两个文件到底是从什么地方获取的呢&#xff1f;答案是这两个证书需要在苹果开发者中心生成&#xff0c;下面我们这篇教程&#xff0c;将教会大家如…