(六)redis持久化操作(RDBAOF)

news/2024/2/29 2:32:08

目录

一、RDB(Redis DataBase)

1、简介

2、持久化流程

3、dump.rdb文件

4、配置文件

5、rdb的备份

6、rdb的恢复

7、优势

8、劣势

二、AOF(Append Only File)

1、简介

2、持久化流程

3、AOF和RDB同时开启

4、AOF启动

5、AOF恢复

 6、AOF同步频率设置

7、优势

8、劣势

三、总结,用哪个

1、官方建议

2、性能建议


一、RDB(Redis DataBase

1、简介

1.1 是什么

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

1.2 备份是如何执行的

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

1.3 Fork

Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。

2、持久化流程

3、dump.rdb文件

在redis.conf中配置文件名称,默认为dump.rdb。
rdb文件的保存路径,也可以修改。默认为Redis启动时命令行所在的目录下。

4、配置文件

sava:这里是用来配置触发 Redis的持久化条件,也就是什么时候将内存中的数据保存到硬盘。默认如下配置:

save 3600 1       # 表示3600 秒内如果至少有 1 个 key 的值变化,则保存
save 300 100      # 表示300 秒内如果至少有 100 个 key 的值变化,则保存
save 60 10000     # 表示60 秒内如果至少有 10000 个 key 的值变化,则保存

stop-writes-on-bgsave-error:默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。

rdbcompression:默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

rdbchecksum:默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

dbfilename:设置快照的文件名,默认是 dump.rdb

dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。

5、rdb的备份

5.1 先通过config get dir 查询rdb文件的目录

5.2 将*.rdb文件拷贝到别的地方

6、rdb的恢复

6.1 关闭redis

6.2 先把备份的文件拷贝到工作目录下

6.3 启动Redis, 备份数据会直接加载

7、优势

  • 适合大规模的数据恢复
  • 对数据完整性和一致性要求不高更适合使用
  • 节省磁盘空间
  • 恢复速度快

8、劣势

  • Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。
  • 虽然Redisfork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
  • 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

二、AOF(Append Only File

1、简介

日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

2、持久化流程

  • 客户端的请求写命令会被append追加到AOF缓冲区内
  • AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中
  • AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量
  • Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的

 

3、AOF和RDB同时开启

AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)

4、AOF启动

默认不开启aof,修改默认的appendonly no,改为yes。重启redis服务。

aof文件的保存路径,同RDB的路径一致。可以在redis.conf中配置文件名称,默认为 appendonly.aof

5、AOF恢复

AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。

5.1 正常恢复

  • 修改默认的appendonly no,改为yes
  • 将有数据的aof文件复制一份保存到对应目录(查看目录:config get dir)
  • 恢复:重启redis然后重新加载

5.2 异常恢复

  • 修改默认的appendonly no,改为yes
  • 如遇到AOF文件损坏,通过/usr/local/bin/redis-check-aof--fix appendonly.aof进行恢复
  • 备份被写坏的AOF文件
  • 恢复:重启redis,然后重新加载

 6、AOF同步频率设置

  • appendfsync always:始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好。
  • appendfsync everysec:每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。
  • appendfsync no:redis不主动进行同步,把同步时机交给操作系统

7、优势

  • 备份机制更稳健,丢失数据概率更低
  • 可读的日志文本,通过操作AOF稳健,可以处理误操作

8、劣势

  • 比起RDB占用更多的磁盘空间
  • 恢复备份速度要慢
  • 每次读写都同步的话,有一定的性能压力
  • 存在个别Bug,造成恢复不能

三、总结,用哪个

官方推荐两个都启用。如果对数据不敏感,可以选单独用RDB。

不建议单独用 AOF,因为可能会出现Bug。

如果只是做纯内存缓存,可以都不用

1、官方建议

  • RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储
  • AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾.

Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

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

2、性能建议

  • 因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
  • 如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。

  • 代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。

  • 只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。

  • 默认超过原大小100%大小时重写可以改到适当的数值。


http://www.ppmy.cn/news/20544.html

相关文章

Ragnar-lothbrok靶机总结

Ragnar-lothbrok靶机渗透总结 靶机下载地址: https://download.vulnhub.com/ragnarlothbrok/Ragnar-lothbrok.ova 打开靶机,使用nmap扫描出靶机的ip和所有开放的端口 可以看到靶机开放了21端口,80端口,443端口,3306端口 一般开放21端口,我们可以先尝试ftp的匿名登录 可以看到…

连续函数的运算与初等函数的连续性——“高等数学”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是连续函数的运算与初等函数的连续性,上篇博客我们学到了函数的连续性和间断点,这篇博客相当于是上篇博客的一个补充,好吧,现在就让我们进入高等数学的世界吧 一、…

RocketMQ 原理介绍及详细安装教程

一、为什么选择RocketMQ Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛…

L1、L2正则化的原理及适用场景

1. L1正则化,也称Lasso回归 1.1 含义 权值向量 中各元素的绝对值之和,一般记作 。 1.2 公式表示 添加了L1正则化的损失函数一般可表示为: 1.3 作用 L1正则常被用来解决过拟合问题; L1正则化容易产生稀疏权值矩阵&#x…

PHP 5 Array 函数

PHP Array 简介 PHP Array 函数允许您访问并操作数组。 支持简单的数组和多维数组。 安装 PHP Array 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 PHP 5 Array 函数 函数描述array()创建数组。array_change_key_case()返回其键均为大写或小写的数组。array_chu…

HQChart实战教程58-K线主图仿tradingview

HQChart实战教程58-K线主图仿tradingview 需求效果图实现思路步骤1. 写透明成交量柱子指标2. 调整成交量柱子和K线图显示区域HQChart插件源码地址完整的demo例子需求 主图K线图和成交量柱子图在一个同窗口显示,柱子图高度为主图窗口高度的1/4,并且成交量柱子图使用透明色 效…

[python] 利用python实现自动签到及Gitee Pages自动部署

一: 前期准备 本教程只适用于没有图片登录验证码的网站。 1.1 基础环境 python3 + selenium + chrome浏览器。 如果有不懂的可以查阅selenium-python中文文档 chrome->设置->关于chrome->查看版本(我的版本是 80.0.3987.106(正式版本) (64 位))。 需要下载跟你…

39_tp6的rce漏洞

tp6的rce漏洞 一、环境搭建 使用docker本地搭建tp6环境 1. 下载镜像 docker pull vulfocus/thinkphp:6.0.122. 端口映射 启动镜像,并将80端口映射到8081端口,防止80端口冲突,运行容器 docker run -it -d -p 8081:80 1fc5d159922e3. 打开网站 默认的网页目录是在public目…

QT/C++——对话框

一、标准对话框 #include "widget.h" #include <QVBoxLayout> #include <QHBoxLayout>Widget::Widget(QWidget *parent): QWidget(parent) {btcolor new QPushButton("setcolor");bterrm new QPushButton("errmsg");btfile new …

【5G NTN】5G NTN(非地面组网)介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

单源最短路的建图方式(Dijkstra)

由于是复习&#xff0c;所以不会解释太多。 主要为Dijkstra的堆优化板子和朴素版&#xff08;看数据范围&#xff09; 再次看看时间复杂度[ n 为点数&#xff0c;m 为边数 ]&#xff1a;朴素版&#xff1a;O()&#xff0c;堆优化版&#xff1a;O( (nm)logm )。 目录 1.热浪&…

LeetCode 2427. 公因子的数目

给你两个正整数 a 和 b &#xff0c;返回 a 和 b 的 公 因子的数目。 如果 x 可以同时整除 a 和 b &#xff0c;则认为 x 是 a 和 b 的一个 公因子 。 示例 1&#xff1a; 输入&#xff1a;a 12, b 6 输出&#xff1a;4 解释&#xff1a;12 和 6 的公因子是 1、2、3、6 。…

gost 常用tunnel配置示例(隧道模式)

gost是用golang语言实现的一个安全隧道。地址位于&#xff1a;https://github.com/ginuerzh/gost是一个不可多得的隧道工具。至于什么是隧道&#xff1f; 就是可以通过这个工具传输一些其他协议的数据。就像这个样子。隧道有什么用呢&#xff1f;可以起到一些加速的作用或者流量…

Java多线程

1. 知识点讲解 线程对象是通过 Thread 类来创建的&#xff1b;任务是通过 Runnable 接口来定义的 Thread 无参构造器 Thread 有参构造器 public Thread(Runnable target)Thread 线程执行流程&#xff1a; 1、创建线程对象&#xff0c;同时指定任务 2、启动线程&#xff0…

Spring泛型处理源码详解,Java泛型处理

文章目录一、Java 泛型基础1、泛型类型擦写代码实例2、Java 5 类型接口源码分析代码实例3、更多java泛型相关基础二、Spring旧版本泛型处理1、Spring 泛型类型辅助类代码实例2、Spring 泛型集合类型辅助类代码实例3、Spring 方法参数封装三、Spring 4.0泛型优化实现1、Resolvab…

基础IO详解

目录 一、系统文件IO 1.1 open 1.1.1 open的第一个参数 1.1.2 open的第二个参数 1.1.3 open的第三个参数 1.1.4 open的返回值 1.2 close 1.3 write 1.4 read 二、文件描述符 2.1 进程与文件描述符 2.2 文件描述符的分配规则 三、重定向 3.1 自实现重定向原理 3.…

PyQt5开发环境搭建 1.2 简单的例子

目录 基本开发步骤 创建Eric6工程目录 使用Qt Creator创建Qt项目 创建项目 Kit Selection 打开编辑窗口 打开form 放一个Label 拖动Label 放一个Button 拖动Push Button 保存UI文件 编译ui文件 当前项目下文件列表 将ui文件编译成py文件 将ui文件和py文件拷贝到…

git搭建远程仓库

前言&#xff1a;我们现在搭建远程仓库&#xff0c;常见的&#xff0c;是去github、gitlab、gitee等这类第三方平台网站上进行部署。咱就顺道说说这三个的区别。 github 是面向全世界的&#xff0c;由国外开发的&#xff0c;基本上放在上面都是开源的&#xff0c;私人仓库好像…

JavaWeb-MyBatis | Mapper代理开发及案例

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JDBC Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&#x…

WireShark快速分析抓包技巧

目录 WireShark快速分析抓包技巧 混杂模式 概述 使用WireShark对常用协议抓包并分析原理 ARP协议 WireShark快速分析抓包技巧 确定WireShark的物理位置&#xff0c;如果没有一个正确的位置&#xff0c;启动Wireshark后会花费很长的时间捕获一些与自己无关的数据 选择捕获…
最新文章