【Redis持久化】RDB、AOF介绍和使用

news/2024/7/4 17:34:15/文章来源:https://www.cnblogs.com/raincedar/p/18278534

RDB、AOF介绍和使用
引言
ROB
介绍
配置
指令介绍
使用指令:
dump文件修复指令
快照禁用
AOF
工作流程:
文件重写:
三种写回策略:
混合使用
引言
持久化的目的,其实就是在Redis重启或者中途崩溃的时候能够依靠自身恢复数据,而不需要再次访问MySQL数据库,重新取得数据,增加MySQL的工作量。

在此有两种方法,RDB和AOF,两种方法都是将从MySQL得到的数据内容进行放置。

ROB:在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上。
AOF:将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍(类似于MYSQL数据库的SQL文件),以此实现数据恢复。
ROB
介绍
首先,介绍ROB定义中的快照(snapshot):把某一时刻的数据和状态以文件(RDB文件:dump.rdb)的形式写到磁盘上。

ROB特点:

Redis的数据都在内存中,保存备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中。
Redis 会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何 IO 操作的,这样就确保了 redis 极高的性能。
RDB方式会在一定的时间间隔内,存储数据进入文件。
优点:

适合大规模的数据恢复
按照业务定时备份
对数据完整性和一致性要求不高
RDB 文件在内存中的加载速度要比AOF快得多
虽然 RDB 有不少优点,但它的缺点也是不容忽视的。

如果你对数据的完整性非常敏感,那么 RDB 方式就不太适合你,因为即使你每 5 分钟都持久化一次,当 redis 故障时,仍然会有近 5 分钟的数据丢失。

所以,redis 还提供了另一种持久化方式,那就是 AOF。

配置
打开配置文件redis.windows.conf

1、Redis 6.0.16及以下:

 

上图内容为:

save 900 1:每隔 900s(15min),如果有超过1个 key 发生了变化,就写一份新的 RDB 文件。

300 10:每隔 300s(5min),如果有超过 10个 key 发生了变化,就写一份新的 RDB 文件。

2、Redis 6.0.16以上:

 

指令介绍
使用指令:
save:主程序中执行会阻塞当前redis服务器,直到持久化工作完成行save命令期间,Redis不能处理其他命令,线上禁止使用。

bgsave(默认):Redis会在后台异步进行快照操作,不阻寒快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。

lastsave:获取最后一次成功执行快照的时间

下图为lastsave的使用方式:


dump文件修复指令
redis- check- rdb
1
使用后效果如下:


快照禁用
配置文件中修改为:save后跟空格,具体结果如下图所示:


AOF
开启:

在redis配置文件redis.windows.conf中:

appendonly yes
1
注意:

AOF保存的是appendonly.aof 文件
默认的 AOF 持久化策略是每秒钟 fsync 一次(fsync 是指把缓存中的写指令记录到磁盘中),因为在这种情况下,redis 仍然可以保持很好的处理性能,即使 redis 故障,也只会丢失最近 1 秒钟的数据。
如果在追加日志时,恰好遇到磁盘空间满、inode 满或断电等情况导致日志写入不完整,也没有关系,redis 提供了 redis-check-aof 工具,可以用来进行日志修复。
工作流程:


命令到达Redis Server 以后并不是直接写入AOF文件,会将其这些命令先放入AOF缓存中进行保存。
AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁的磁盘IO操作。
AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件。
文件重写:
因为采用了追加方式,如果不做任何处理的话,AOF 文件会变得越来越大,为此,redis 提供了 AOF 文件重写(rewrite)机制,即当 AOF 文件的大小超过所设定的阈值时,redis 就会启动 AOF 文件的内容压缩,只保留可以恢复数据的最小指令集。

AOF 重写的内部运行原理:

在重写即将开始之际,redis 会创建(fork)一个“重写子进程”,这个子进程会首先读取现有的 AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
与此同时,主工作进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的 AOF 文件中,这样做是保证原有的 AOF 文件的可用性,避免在重写过程中出现意外。
当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新 AOF 文件中。
当追加结束后,redis 就会用新 AOF 文件来代替旧 AOF 文件,之后再有新的写指令,就都会追加到新的 AOF 文件中了。
三种写回策略:


混合使用
最后,在实际使用两个进行混合使用。

开启混合使用,redis配置文件中:

aof- use- rdb- preamble yes
1


当开启混合时,数据恢复主要使用AOF方式,重启只加载aof文件。

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

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

相关文章

从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用

一、引言 在信息技术飞速发展的今天,运维工作已经从最初的人工操作,逐步演变为自动化、AIOps(人工智能运维)和ChatOps(通过聊天的方式去运维)。这些变革不仅提升了运维效率,还显著保障了系统的稳定性。特别是借助大模型,运维同学能够更加高效地完成工作,并应对复杂的运…

ros microros 使用超声波雷达测量距离

我们使用的超声波模块一共有四个引脚,分别是TRIG 即发送引脚,用于发送超声波ECHO 即接收引脚,用于接收反射回来的超声波VCC 电源接5VGND 电源地 一、新建工程新建example18_sr04二、编写代码带注释的代码如下#include <Arduino.h> #define Trig 27 // 设定SR04连接的A…

tensorflow-gpu配置

1.安装Anaconda 下载地址:Anaconda | The Operating System for AI 2.查询tensorflow-gpu不同版本所对应的python、cuDNN和CUDA的版本 官网:在 Windows 环境中从源代码构建 | TensorFlow (google.cn) 3.使用conda安装相应的库# tensorflow_gpu-2.3.0 conda init conda crea…

Charles 使用

一、下载安装官网:https://www.charlesproxy.com/二、移动端抓包 2.1、安装证书 设置代理弹出对应的 代理ip 和端口号,在移动端的wifi 配置对应的代理,然后返回对应的证书地址 下载证书 安装 即可

ubuntu与windows双系统时间不同步

两个系统时间不同步是因为对于硬件时间(BIOS里的时间)的时区认定不一致,windows认为BIOS的时间是当前系统时区(中国时区:UTC+08(CST-8)),ubuntu认为BISO时间是UTC时区时间.两个系统在启动是按照BISO时间设置系统时间导致了系统时间差异。 处理思路无非,修改windows或者ub…

图像采集卡是什么,有什么用处

机器视觉技术的发展源于光学、化学、物理、电子、电视、机械设计、数学、软件、人工智能、计算机和计算机视觉以及互联网等领域的发现。随着这些不同学科取得某些里程碑式的进展,它们为开发用于自动检查、测量、过程控制和机器人引导应用的成像系统铺平了道路。 图像采集卡是许…

如何把电子书转成EPUB?

大家知道EPUB是什么格式吗?其实EPUB是一种电子图书标准,由国际数字出版论坛提出。它是一个自由的开放标准,属于一种可以“自动重新排版”的内容;也就是文字内容可以根据阅读设备的特性,以较适于阅读的方式显示。有很多时候,不同的阅读器所支持的电子格式是不一样的,所以…

一文读懂“负载均衡”

原文链接:https://blog.csdn.net/cyl101816/article/details/135195729 负载均衡无处不在,无论是分布式,还是中间件,还是微服务,都需要涉及到负载均衡。 一、什么是负载均衡负载均衡是一种在计算机网络和系统架构中使用的技术,用于均衡分发工作负载到多个资源,比如:服务…

ros mocroros 使用双核运行microros

在硬件篇开始的第一节时,曾提到,我们所使用的开发板单片机是双核240M主频的,但是在后面的开发中我们并没有真正的使用了双核,主频也是使用的默认160MHZ。所以本节带你一起带你一起提升主频并启动双核进行MicoROS的双核。 一、双核与RTOS介绍 所谓双核指的是ESP32单片机有两…

SpringMVC的数据获取问题

在传统的javaweb中我们获取数据是通过HttpServletRequest中的getParameter或者getHeader等方法来获取相关的信息。由此我们引出了以下问题:在SpringMVC中应该如何获取请求提交的数据呢? 在SpringMVC中又应该如何获取请求头信息呢? 在SpringMVC中又应该如何获取客户端提交的C…

mysql用户

一、数据库用户管理 DCL:数据控制语言,用于设置或者更改数据库用户或角色权限 1.新建用户create user 用户名@源地址 identified by 密码;用户名 指定将创建的用户名来源地址 指定新创建的用户可在哪些主机上登录 可使用IP地址、网段、主机名的形式 本地用户可用localhost …

可视化

D3.js绘制柱形图 <!DOCTYPE html><html lang="en"><head><title>bar example</title><script src="d3.min.js"></script></head><body><div id="barchart"></div><script…

【0基础学爬虫】爬虫基础之scrapy的使用

【0基础学爬虫】爬虫基础之scrapy的使用大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速…

springboot使用itextpdf+jfreechart制作PDF文档

1. springboot引入的依赖组件 项目中需要引入itextpdf和jfreechart两个组件,版本根据项目所需进行引入,maven组件版本查询可根据如下地址进行查询:maven组件查询<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId&g…

spring趣玩

自定义banner 先上图片,替换spring启动标志;或者也可以在启动类代码设置Banner也可以通过设置springApplication.setBannerMode(Banner.Mode.OFF);关闭打印横幅ApplicationRunner和@PostConstruct ApplicationRunner 是一种灵活的机制,可以用来执行数据库迁移、预加载数据、…

图论初步与可视化

本讲将简要介绍图论中的基本概念,并主要讲解图论中的最短路径问题。以及如何将图论可视化 目录一、图论的概念二、在线作图网站1.index介绍2.Node Count介绍3.Graph data三、Matlab作无向图1.无权图(每条边的权重默认为1)2.利用字符串做无权图3.有权图四、Matlab作有向图 一…

使用不同函数打印torch.nn模型——print(model),named_children(),named_modules():

创建一个具有三级嵌套的模型,结构如图:import torch import torch.nn as nn# 定义子子模块 class SubSubModule(nn.Module):def __init__(self):super(SubSubModule, self).__init__()self.conv = nn.Conv2d(3, 3, kernel_size=3, padding=1)def forward(self, x):return sel…

[LeetCode] 189. Rotate Array

无敌的切片他又来了。 class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""#0if k ==0:pass#elselenn = len(nums)k = k % lennnums[:] =nums[lenn -k:] + nums…

Centos双网卡冗余绑定

1. 前言 关于双网卡绑定,前前后后踩过不少的坑,虽然这是 RHCE 中的一道题,但是在实践中碰到问题也够喝一壶的。 在实践中,虚拟机、物理机都做过,但是不尽相同,大部分的坑也集中在这里,本文长期更新关于网卡绑定中遇到的问题及处理方法。 现在的服务器默认都配备 4 张 千…