当前位置: 首页 > 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…...

开发者技能图谱实战指南:从结构化知识到可执行代码的进阶之路

1. 项目概述:一个面向开发者的技能图谱与实战仓库最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫GuDaStudio/skills。乍一看名字,你可能会觉得这又是一个普通的“技能清单”或者“学习路线图”项目。但点进去仔细研究后&#xf…...

FAST开发方法在系统分析中四个阶段

在系统分析师考试中,被频繁考查的FAST(Framework for the Application of Systems Thinking)方法,是一个聚焦于系统分析阶段的框架。 它的核心是将复杂的分析工作拆解为四个环环相扣的阶段:初始研究、问题分析、需求分析和决策分析。 📊 四个阶段速览 阶段 核心任务 1…...

基于SpringBoot的门禁与访客管理系统毕业设计

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot框架的门禁与访客管理系统以解决传统门禁系统在智能化管理方面存在的局限性。当前多数门禁系统仍采用封闭式架构设计导致数据…...

python海龟绘图之窗口背景

可以将海龟绘图的窗口背景设置为纯色或者图片。1 将窗口背景设置为纯色通过bgcolor()函数设置窗口的背景色。该函数有四种使用方法,分别是① bgcolor()② bgcolor(colorstring)③ bgcolor((r, g, b))④ bgcolor(r, g, b)1.1 bgcolor()bgcolor()不带参数的形式&#…...

Midjourney提示词工程实战手册(工业级Prompt架构白皮书):从语义解析、权重分配到多模态对齐的完整链路

更多请点击: https://intelliparadigm.com 第一章:Midjourney提示词工程的核心范式与工业级演进路径 提示词工程已从早期的“关键词堆砌”跃迁为融合语义建模、风格解耦与可控生成的系统性工程。在工业级实践中,其核心范式正围绕**结构化提示…...

用TensorFlow 2.0复现Mask R-CNN:从ResNet主干到ROI Align的保姆级代码解读

TensorFlow 2.0实现Mask R-CNN核心技术解析:从ResNet到ROI Align的工程实践 在计算机视觉领域,实例分割一直是最具挑战性的任务之一。它不仅需要精确地定位物体,还要在像素级别上区分不同实例。本文将深入探讨如何用TensorFlow 2.0实现Mask R…...

龙虾热降温,我们到底需要什么样的 Agent?

责编 | 《AI 进化论》栏目组出品 | CSDN(ID:CSDNnews)过去几个月,AI Agent 无疑是技术圈最火热的词。我们聊颠覆、聊入口、聊取代……仿佛一夜之间,一个无所不能的“数字员工”就能接管我们的一切工作。热度之下&#…...

从田野笔记到理论建模,NotebookLM政治学辅助全流程拆解,含6类典型误用场景避坑指南

更多请点击: https://intelliparadigm.com 第一章:从田野笔记到理论建模:NotebookLM政治学辅助全流程概览 NotebookLM 作为 Google 推出的基于用户上传文档进行深度语义理解的 AI 助手,正逐步成为政治学研究者处理非结构化文本的…...

软件测试工程师的“技术外交”:如何搞定开发?

当质量守卫者遇上代码创造者在软件工程的世界里,测试与开发的关系常被比喻为“猫鼠游戏”——一个拼命构建,一个拼命破坏。这种刻板印象背后,隐藏着一条真实而残酷的职场定律:测试工程师的专业价值,一半取决于技术能力…...

从零打造互动徽章:激光切割与电容触摸的软硬件融合实践

1. 项目概述与核心思路如果你参加过技术大会或者创客市集,一定对那些闪烁着酷炫灯光、能与人互动的徽章印象深刻。这类被称为“Badge”的可穿戴设备,早已超越了单纯的身份标识功能,成为了展示技术、创意和社群文化的微型平台。今天要分享的&a…...