当前位置: 首页 > news >正文

Redis(持久化 -- RDB AOF)

持久化

通常我们认为持久化为: 重启进程/重启主机之后, 数据仍然存在不丢失
把数据存储在硬盘上 – 持久
把数据存储在内存中 – 不持久


Redis 持久化

redis 是一个内存数据库, 也就是说本身是不持久的(但是快[效率高]), 于是 Redis 提供了持久化机制 — RDB 和 AOF

二者都是对 Redis 数据的硬件备份, 区别在于
RDB 是定时备份, 二进制格式保存数据
AOF 是实时备份, 文本格式保存数据


RDB(Redis Database)

RDB 持久化是把当前进程数据生成快照保存到硬盘的过程, RDB 持久化的触发过程分为 手动触发和自动触发


RDB 触发机制


手动触发

程序员(人) 通过 redis 客户端, 执行特定命令 (save, bgsave) 来触发快照生成.

  • sava 命令: Redis 主线程停止其他工作, 进行 RDB 过程 (会对 Redis 服务器造成阻塞[单线程模型])
  • bgsave 命令: Redis 进程执行 fork 操作创建子进程, 子进程负责 RDB 持久化过程, 阻塞只发生在 fork 阶段, 不涉及长时间的阻塞 .

bgsave 命令的运行流程
在这里插入图片描述

  1. 执行 bgsave 命令, Redis 父进程会判定其他子进程是否正在执行 (RDB/AOF 子进程), 如果存在则直接返回
  2. 父进程 fork 一个子进程, fork 过程父进程阻塞
  3. 父进程 fork 完子进程后, bgsave 命令返回 “Background saving started” 信息, 父进程不再阻塞, 可以响应其他命令
  4. 子进程创建 RDB 文件, 根据 父进程内存 生成临时快照, 完成后对原有文件进行 替换
  5. RDB 文件替换完成后, 子进程 发送信号 给父进程, 通知父进程 RDB 操作完成, 父进程更新信息

自动触发

通过程序配置的一些设定, redis 依据某些条件自动触发 RDB 持久化操作.

  1. 配置文件中设置触发频率 "save m n " 对应 m 秒内数据集发生了 n 此变化, 就触发 RDB 持久化
  2. 使用 shutdown 命令关闭 Redis, 会执行 RDB 持久化 (service redis-server restart 命令也会触发)
  3. Redis 进行主从复制时, 主节点会生成 RDB 快照, 传输给从节点. (此时也触发 RDB 持久化)

RDB 持久化的优缺点

  • RDB 是二进制文件, 代表 Redis 在某个时刻的数据快照, 适用于备份, 全量复制等场景.
  • RDB 机制 恢复数据速度远远快于 AOF 机制 (RDB 文件以二进制形式存储, AOF 文件以文本文件形式存储, 读 RDB 文件可以按照字节格式取出, 放到对应结构体/对象中, 读 AOF 文件需要进行一系列字符串切分操作 [耗时久 …])
  • RDB 机制在两次生成快照之间, 实时数据可能会丢失(不正常关闭,第二次 快照生成失败)
  • RDB 文件使用 特定二进制 格式保存, 不同版本兼容性有风险

AOF (Append Only File)

AOF 机制就是把用户的 每次操作 , 都记录到一个文件中, 当 Redis 重启的时候, 会读取这个 AOF 文件的内容(一堆操作), 来恢复数据 .

术语一点的说法:
以独立日志的方式记录每次写命令, 重启时重新执行 AOF 文件中的命令以达到恢复数据的目的 .

  • AOF 机制默认关闭, 可通过修改配置文件来开启
  • AOF 优先级高于 RDB, 当 aof 文件和 rdb 文件同时存在时,并且两个机制都启用时, rdb 文件会失效

对 redis.conf 文件进行修改
在这里插入图片描述
在这里插入图片描述


AOF 工作流程

在这里插入图片描述

  1. 所有写入的命令会追加到 缓冲区 (aof_buf) 中
  2. AOF 缓冲区根据对应的策略向硬盘做同步操作
  3. 随着 AOF 文件的越来越大, 定期对 AOF 文件进行重写,压缩
  4. Redis 重启时, 加载 AOF 文件进行数据恢复

AOF 缓冲区

缓冲区: AOF 机制会将用户操作/命令, 先写入到缓冲区, 积累一些后,再统一写入硬盘 AOF 文件末尾

  • 写入缓冲区操作比写入硬盘操作要快
  • 写入 AOF 文件末尾是顺序写入, 要比随机写入要快

缓冲区刷新频率 设置参数

aways : 命令写入缓冲区后直接刷新
everysec : 每秒由同步线程调用刷新操作
no : redis 线程不主动刷新, 由 OS 控制刷新频率

缓冲区刷新频率可通过修改配置文件中的 appendfsync 调整

在这里插入图片描述


AOF 重写机制 rewrite

随着命令不断写入 AOF 文件, 文件会越来越大
于是就需要对其中内容进行整, 剔除冗余操作, 合并修改操作 …
以达到压缩文件体积的效果

AOF 重写流程

在这里插入图片描述

  1. 执行 AOF 重写请求
  2. 父进程执行 fork 创建子进程
  3. 子进程重写 新AOF 文件的同时, 父进程需要往缓冲区中写入新的命令
  4. 新 AOF 文件生成完毕, 子进程发送信号通知父进程
  5. 父进程将缓冲区内容追加到 新的 AOF 文件中
  6. 新 AOF 文件替换旧 AOF 文件
    重写完成

混合持久化

将 RDB 机制和 AOF 机制同时应用, 同时具有二者的优势
通过在 aof文件中 配置文件中修改 aof-use-rdb-preamble yes 来设置

  1. AOF: 以文本方式记录每一个请求/命令
  2. RDB: 重写时以 RDB 二进制格式重写

相关文章:

Redis(持久化 -- RDB AOF)

持久化 通常我们认为持久化为: 重启进程/重启主机之后, 数据仍然存在不丢失 把数据存储在硬盘上 – 持久 把数据存储在内存中 – 不持久 Redis 持久化 redis 是一个内存数据库, 也就是说本身是不持久的(但是快[效率高]), 于是 Redis 提供了持久化机制 — RDB 和 AOF 二者都是对…...

LDR6328助力Type-C普及,便捷充电,绿色生活更精彩

随着科技的进步和全球统一接口的需求,Type-C接口正日益受到青睐。越来越多的设备正选择采纳这一先进的接口设计,它的普及无疑在改善着我们的日常生活。 在过往,许多小功率设备如小风扇、蓝牙音箱、桌面台灯以及家用加湿器等,都普遍…...

redis主从复制、哨兵模式、集群

文章目录 redis主从复制主从复制的配置**安装Redis**配置主服务器配置从服务器验证主从效果 哨兵模式哨兵的工作机制哨兵模式的搭建启动哨兵 集群分布式集群的搭建 redis主从复制 Redis主从复制(Redis replication)是Redis提供的一种数据备份和故障转移…...

shell免登陆脚本

#!/bin/bash ## 脚本接收的参数,也就是要互相配置 SSH 免密登录的服务器列表参数 BASE_HOST_LISTip ## 密码,默认用户是当前运行脚本的用户,比如 root 用户 ## 这里改成你的用户对应的密码 BASE_PASSWORD"password" ## shell 函…...

基于springboot+vue+Mysql的职称评审管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置(Windows)下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具: 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题,笔者因此认为代码版本管理工具对于提高团队…...

【算法】无序数组的两数之和 - map标记

题目 在一个无序数组中找到两个数,两个数之和为给定的一个数,返回两个数在数组中的下标。 原理 遍历数组,遍历到一个数字的时候,记录下这个数及其下标,遍历时判断给定数减去这个数为key在map中是否存在,…...

Prime (2021): 2

前言 这个靶机有亿点难,收获很多。打靶的时候,前面很顺,到创建ssh公钥之后就一点不会了。 1 01 arp扫描,发现有一个130,再查看端口 有22,80,129,445,10123 dirb扫描目录 这…...

React 状态管理:安全高效地修改对象属性的 3 种方法

在 React 应用程序中,状态(state)是驱动整个应用程序的核心。当应用程序的状态发生变化时,React 会自动重新渲染相应的组件,以确保用户界面的更新。 与数组状态一样,对象状态在 React 中也需要特别处理。直接修改对象属性是不被允许的,因为 React 的不可变性原则要求我们创建一…...

python实现pdf的页面替换

利用第三方库PyPDF2,下面例子中进行的是将 origin.pdf 的第17页替换为 s17.pdf 的第1页: import PyPDF2def replace_pages(original_pdf_path, replacement_pages):with open(original_pdf_path, rb) as original_file:original_pdf PyPDF2.PdfReader(…...

[AIGC] Java List和Map常用API以及其Python实现方式对照介绍

Java和Python作为当今非常浅显易懂的编程语言,其数据结构中对于List和Map(Java)或List和Dict(Python)的操作无疑是每个程序员都非常必需的知识。本文将介绍在Java中对List和Map常用的一些操作,并给出在Pyth…...

零基础如何闯入IT的神秘大门?

前言 随着信息技术的飞速发展,IT行业成为了许多有志之士梦寐以求的职业领域。但对于零基础的人来说,如何成功进入这个行业却是一个不小的挑战。下面,我将结合自身的C语言专业知识,为大家详细阐述一条可行的学习路径,并…...

java程序 .exe启动nginx防止重复启动,已解决

java代码生成好的.exe启动nginx服务程序 根据nginx占用端口来解决nginx服务重复启动问题(下面代码了解代码逻辑后根据自己的业务需求修改即可) 代码: package org.example;import javax.swing.*; import java.awt.*; import java.io.*; …...

二十一、Rust 反射 获取类型

不同于 java 中的反射,Rust 没有提供以往意义上的运行时反射,取而代之的是 “编译期反射”,如 类型分析、类型转换、类型签名。但即便如此,也已经能对 Rust元编程 提供很多助力了。 这种操作,主要通过 Any 来实现&…...

Flutter Engine引擎概念

1.Flutter是Google提供的开源框架。 2.本身由C编写并兼容iOS(底层C)/Android(底层C)平台的FlutterEngine框架负责UI渲染、数据转移、调用DartVM虚拟机。 3.FlutterEngine框架由Skia图形库、Dart运行时、Flutter框架代码组成。Skia是用于图形绘制和文本显示的2D图形引擎库&#…...

【运行环境】加载资源的形式

相关资源:性能优化原则 1 加载资源的形式 html代码 媒体文件,如图片,视频等 javasccript css 2 加载资源的过程 DNS解析:域名-> ip地址 浏览器根据IP地址向服务器发送http 请求 服务器处理http 请求,并返回给浏览器…...

备战蓝桥杯Day40 - 第11届python组真题 - C跑步锻炼

一、题目描述 二、思路 1、使用datetime库中的方法可以很好的解决这个问题。 2、定义起始时间和结束时间,判断是否是周一或者是1号,结果res加上相应的里程数。 3、最后输出 res 即为本题答案。 三、代码实现 import datetimestart datetime.date(2…...

书生·浦语大模型第二期实战营第二课笔记和基础作业

来源: 作业要求:Homework - Demo 文档教程:轻松玩转书生浦语大模型趣味 Demo B站教程:轻松玩转书生浦语大模型趣味 Demo 1. 笔记 2.基础作业 2.1 作业要求 2.2 算力平台 2.3 新建demo目录,以及新建目录下的文件,下载模型参数 2.4 Intern…...

成功解决> 错误: 无效的源发行版:17

运行项目的时候出现下面的报错: Execution failed for task ‘:device_info_plus:compileDebugJavaWithJavac’. 错误: 无效的源发行版:17 原因:没有设置好自己项目的JDK版本 解决:1.检查自己项目的JDK版本 将自己的项目改为JDK 1…...

深度剖析:网络安全中的红蓝对抗策略

红蓝对抗 红蓝对抗服务方案 在蓝队服务中,作为攻击方将开展对目标资产的模拟入侵,寻找攻击路径,发现安全漏洞和隐患。除获取目标系统的关键信息(包括但不限于资产信息、重要业务数据、代码或管理员账号等)外&#x…...

Java异常处理之旅:解救迷失的程序员(二)

本系列文章简介: 在编程世界中,程序员们常常会遇到各种各样的问题和挑战。有时候,这些问题很容易解决,而有时候,它们却会让我们感到迷失和无助。 在这个旅程中,我们将探索Java异常处理的世界,解…...

网络安全介绍

网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统能够连续可靠正常地运行,网络服务不中断。以下是一些网络安全相关的方面: 首先,随着科学技术的进…...

分享一个好看的APP下载分发页,App Store风格

分享一个好看的APP下载分发页,App Store风格 可以自动识别安卓和苹果哦! 内容直接可以页面上修改,所见即所得 下图是一个真实截图,想要的留下评论哦!...

C++ 获取数组大小、多维数组操作详解

获取数组的大小 要获取数组的大小&#xff0c;可以使用 sizeof() 运算符&#xff1a; 示例 int myNumbers[5] {10, 20, 30, 40, 50}; cout << sizeof(myNumbers);结果&#xff1a; 20为什么结果显示为 20 而不是 5&#xff0c;当数组包含 5 个元素时&#xff1f; 这…...

苹果电脑怎么彻底删除软件 苹果电脑卸载软件在哪里 cleanmymac x怎么卸载 mac废纸篓怎么删除

苹果电脑卸载软件的方法相对直观和简单&#xff0c;尤其是对于习惯使用Mac操作系统的用户来说。以苹果MacBook Pro为例&#xff0c;以下是卸载软件的详细步骤、使用方法、注意事项与建议。 一、卸载软件的详细步骤&#xff1a; 1. 打开Mac电脑&#xff0c;进入桌面&#xff0c…...

STM32F407 FSMC并口读取AD7606

先贴一下最终效果图.这个是AD7606并口读取数据一个周期后的数据结果. 原始波形用示波器看是很平滑的. AD7606不知为何就会出现干扰, 我猜测可能是数字信号干扰导致的. 因为干扰的波形很有规律. 这种现象基本上可以排除是程序问题. 应该是干扰或者数字信号干扰,或者是数字和模拟…...

WebGPU vs. 像素流

在构建 Bzar 之前&#xff0c;我们讨论过我们的技术栈是基于在云上渲染内容的像素流&#xff0c;还是基于使用设备自身计算能力的本地渲染技术。 由于这种选择会极大地影响项目的成本、可扩展性和用户体验&#xff0c;因此在开始编写一行代码之前&#xff0c;从一开始就采取正确…...

Windows下docker-compose部署DolphinScheduler

参照&#xff1a;快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录&#xff0c;进入apache-dolphinscheduler-xxx-…...

微服务项目sc2024通用Base工程

1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…...

git学习 1

打开自己想要存放git仓库的文件夹&#xff0c;右键打开git bush&#xff0c;用git init命令建立仓库 用 ls -a(表示全都要看&#xff0c;包括隐藏的)可以看到git仓库 也可以用 git clone 接github链接&#xff08;点code选项里面会给链接&#xff0c;结尾是git的那个&#xf…...