【Redis】持久化

news2024/12/23 9:38:23

文章目录

  • 一、RDB
    • 1.1、RDB的自动备份与手动备份
      • 1.1.1、自动备份
      • 1.1.2、手动备份
    • 1.2、RDB优点
    • 1.3、RDB缺点
    • 1.4、RDB快照
    • 1.5、RDB优化配置项
  • 二、AOF
    • 2.1、AOF工作流程
    • 2.2、AOF写回策略
    • 2.3、MP-AOF实现
    • 2.4、AOF优缺点
    • 2.5、AOF重写机制
  • 三、RDB+AOF混合持久化
    • 3.1、数据恢复顺序和加载流程
  • 四、纯缓存模式

一、RDB

RDB持久化是以指定的时间间隔,将内存中的数据集快照写入磁盘。其保存的文件是 dump.rdb文件。

1.1、RDB的自动备份与手动备份

1.1.1、自动备份

RDB触发备份
将配置修改如下

save 5 2
dir /myredis/dumpfiles
dbfilename dump.rdb

redis中执行两次操作时会保存一次dump.rdb文件。
此时若使用FLUSHDB,redis会保存空数据到dump.rdb
此时若使用SHUTDOWN,redis会把当前的数据保存到dump.rdb

RDB 恢复备份
  重启redis时,redis会通过加载redis.conf中的dump.rdb的文件路径来恢复redis数据库。
:不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储,以防生产机物理损坏后备份文件也挂了。

1.1.2、手动备份

  Redis手动生成了两个命令来生成RDB文件,分别是SAVEBGSAVE,其中一般使用BGSAVE
  由于使用SAVE会在主程序中执行会阻塞当前redis服务器,直到持久化工作完成。执行SAVE命令期间,Redis不能处理其他命令,所以在线上禁止使用SAVE
  使用BGSAVE会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求,该触发方式会fork一个子进程由子进程复制持久化过程。
  并且还可以使用LASTSAVE命令获取最后一次成功执行快照的时间。

1.2、RDB优点

  • RDB非常适合灾难恢复,它是一个可以传输到远程数据中心的压缩文件。
  • RDB最大限度地提高了Redis的性能,因为Redis父进程为了持久化而需要做的唯一工作就是派生一个将所有其余工作都完成的子进程。父进程永远不会执行磁盘I/O或类似操作。
  • 与AOF相比,RDB允许使用大数据集更快地重启。
  • 在副本上,RDB支持重启和故障转移后的部分重新同步。

1.3、RDB缺点

  • 如果Redis由于任何原因没有在正常关闭的情况下停止工作,那最新分钟的数据可能会丢失。
  • 内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能。
  • RDB需要经常fork()以便使用子进程在磁盘上持久化。如果数据集很大,fork()会很耗时。

1.4、RDB快照

  触发RDB快照的操作有:

  • 配置文件中默认的快照配置
  • 手动SAVE/BGSAVE命令
  • 执行FLUSHDB/FLUSHALL命令
  • 执行SHUTDOWN且没有设置开启AOF持久化
  • 主从复制时,主节点自动触发

禁用快照的方法:

  • 动态停止RDB保存规则的方法:redis-cli config set save ""
  • 快照禁用,在配置文件redis.conf中修改save ""

1.5、RDB优化配置项

  RDB的优化配置项在配置文件redis.confSNAPSHOTTING模块中

save <seconds> <changes>
# 在规定的时间内或者几次修改后自动保存到磁盘

dbfilename  # dump.rdb的文件名

dir # dump.rdb所在的路径

stop-writes-on-bgsave-error
# 默认为yes,在bgsave报错后停止写入
# no表示在快照写入失败时,也能确保redis继续接受新的写请求。

rdbcompression
# 对于存储到磁盘的快照是否压缩存储。
# yes,redis会使用LZF算法进行压缩
# no,减少CPU在这方面的消耗

rdbchecksum
# 合法性校验
# 默认yes,redis使用CRC64算法进行数据校验
# no,关闭校验,提高性能

rdb-del-sync-files
# 默认no,禁用此选项

二、AOF

  AOF是以日志形式来记录每个写操作,将Redis执行过的所有写指令记录下来,并且只允许追加文件不允许改写文件,在redis启动的时候读取该文件并且将写指令从前往后执行一遍以完成数据的恢复工作。
  默认情况下,redis没有开启AOF,通过appendonly yes来开启。它保存的文件名为appendonly.aof

2.1、AOF工作流程

在这里插入图片描述

序号详细步骤
1客户端会产生请求命令发送至服务端
2命令到达服务端后,并没有直接写入AOF文件,先保存在AOF缓存中,AOF缓存的目的是当这些命令到达一定数量后再写入磁盘,避免频繁的磁盘IO操作
3AOF缓存根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘的AOF文件
4由于AOF文件内容的增加,为了避免膨胀,进行AOF重写完成命令的合并,从而达到AOF文件压缩的目的
5服务端重启后,会从AOF文件载入数据

2.2、AOF写回策略

  AOF有三种写回策略,默认是everysec

配置项写回时机优点缺点
always同步写回可靠性高、数据不丢失每个写命令都要写磁盘,IO量大,性能影响较大
everysec每秒写回性能适中宕机时丢失1秒内的数据
no由操作系统控制写回性能好宕机时丢失的数据较多

2.3、MP-AOF实现

  MP-AOF就是将原来的单个AOF文件拆分成多个AOF文件。AOF的类型有:

  • BASE:基础AOF,由子进程通过重写产生,最多只有一个
  • INCR:增量AOF,一般会在AOFRW开始执行时创建,可能存在多个
  • HISTORY:AOFRW成功完成后,所有的BASEINCR AOF都变成HISTORY,该类型的AOF会被Redis自动删除。

  为了管理这些AOF文件,还引入了manifest文件来追踪管理这些AOF,总的来说,Redis7以后的AOF文件结构如下:

// 几种类型文件的前缀,后面跟着有关序列和类型的附加信息
appendfilename "appendonly.aof"

//新版本增加的目录配置项目
appenddirname "appendonlydir"

//具体文件
1、基本文件
	appendonly.aof.1.base.aof
2、增量文件
	appendonly.aof.1.incr.aof
	appendonly.aof.2.incr.aof
3、清单文件
	appendonly.aof.manifest

2.4、AOF优缺点

优势

  • 使用AOF Redis更加持久,使用每秒fsync策略既可以保证写入性能,也可以减少redis宕机时丢失的数据。
  • AOF日志是一个仅附加的日志,因此不会出现寻道问题,也不会在断电时出现损坏问题,即使日志以写一半的命令结尾,redis-check-aof工具也能轻松修复。
  • Redis能够自动重写AOF,从而减少AOF的磁盘占用空间。
  • 即使使用FLUSHALL命令刷新了所有内容,也可以通过删除AOF中的最新内容来恢复数据。

劣势

  • AOF文件通常比相同数据集的RDB文件大,回复速度慢于RDB
  • AOF运行效率低于RDB,每秒同步策略效率好,不同步的话效率和RDB相同。

2.5、AOF重写机制

  重写机制通过启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。它并不是对源文件进行重新整理,而是直接读取服务器现有的键值对,然后用一条命令去代替之前记录这个键值对的多条命令,生成一个新的文件去替换原来的AOF文件。
触发机制
  手动方式通过命令bgrewriteaof命令触发
  自动方式通过配置文件的选项触发

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 这里表示被重写的aof文件既要达到之前大小的一倍又要超过64mb才会自动重写

  触发重写后,相应AOF文件的序号会增加,例如:

appendonly.aof.1.base.aof
appendonly.aof.1.incr.aof

## 变成

appendonly.aof.2.base.aof
appendonly.aof.2.incr.aof

重写原理

  • 在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令分析压缩并写入一个临时文件中。
  • 主进程将新接收到的写指令一边累计到内存缓冲区中,一边继续写入到原有的AOF文件中,保证了AOF文件的可用性,避免在重写过程中出现意外。
  • 当“重写子进程”完成重写工作后,它会给父进程发送一个信号,父进程收到信号后将内存中缓存的写指令追加到新AOF文件中。
  • 追加结束后,redis使用新的aof文件替换旧的aof文件,之后新的写指令都会追加到新的aof文件中。
  • 重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库用命令的方式重写了一个新的aof文件

三、RDB+AOF混合持久化

  结合了RDBAOF的优点,既能快速加载又能避免丢失过多的数据。这种混合方式的具体流程是先使用RDB进行快照存储,然后使用AOF持久化记录所有写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样重启服务的时候会从RDBAOF两方恢复数据,兼具了数据完整性和性能。
  简单来说,混合持久化使得AOF=RDB头部+AOF混写

3.1、数据恢复顺序和加载流程

  在RDB和AOF都启用的情况下,AOF的优先级高于RDB,redis会先判断AOF文件是否存在,如果不存在的话才会使用RDB
在这里插入图片描述


四、纯缓存模式

  纯缓存模式是关闭redis服务器的持久化功能从而提高服务器性能的方式。主要方法是同时关闭RDB和AOF

禁用rdb
  修改配置文件参数save "",禁用rdb持久化模式下,我们仍然可以使用命令save、bgsave生成rdb文件

禁用aof
  修改配置文件参数appendonly no,禁用aof持久化模式下,我们仍然可以使用命令bgwriteaof生成aof文件

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

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

相关文章

生产环境中秒杀接口并发量剧增与负载优化策略探讨

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 1. 实施限流措施 1.1 令牌桶算法&#xff1a; 1.2 漏…

如何申请阿里云服务器学生优惠,入口在这呢!

阿里云学生服务器免费申请&#xff0c;之前是云翼计划学生服务器9元/月&#xff0c;现在是高校计划&#xff0c;学生服务器可以免费申请&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之…

什么是队头阻塞以及如何解决

前言 通常我们提到队头阻塞&#xff0c;指的可能是TCP协议中的队头阻塞&#xff0c;但是HTTP1.1中也有一个类似TCP队头阻塞的问题&#xff0c;下面各自介绍一下。 TCP队头阻塞 队头阻塞&#xff08;head-of-line blocking&#xff09;发生在一个TCP分节丢失&#xff0c;导致…

ip地址切换器安卓版,保护隐私,自由上网

在移动互联网时代&#xff0c;随着智能手机和平板电脑的普及&#xff0c;移动设备的网络连接变得愈发重要。为了满足用户在不同网络环境下的需求&#xff0c;IP地址切换器安卓版应运而生。本文将以虎观代理为例&#xff0c;为您详细解析IP地址切换器安卓版的功能、应用以及其所…

26、链表-环形链表II

思路&#xff1a; 这道题就是判断链表中是否有环&#xff0c;首先使用集合肯定可以快速地解决&#xff0c;比如通过一个set集合遍历&#xff0c;如果遍历过程中有节点在set中已经存在那么说明存在环。返回这个节点即可 第二种方式就是通过快慢指针方式寻找环。如何做呢&#xf…

震惊!借助Coze白嫖GPT4-128k解决方案

震惊!某大佬借助Coze白嫖GPT4-128k解决方案 前言 此文章介绍如何免费使用GPT-4高级模型并拓展API功能 最近的 Coze 在国内开放了&#xff0c;可以免费使用大模型。但是和国外的有点区别&#xff0c;国外版本使用的chatgpt4&#xff0c;国内版本使用的是语雀大模型。 Coze是一…

《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?

问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null&#xff0c;那么typeof nullValue "?" const u …

图书推荐:用ChatGPT获取在线被动收入的8个方法

Universe S. The ChatGPT Money Mastery. Unlocking Online Income..for Dummies 2023 想要彻底革新您的收入模式吗&#xff1f;《用ChatGPT获取在线被动收入的8个方法》一书是您不可错过的指南。 在这个数字化飞速发展的时代&#xff0c;人工智能成为了开启成功之门的钥匙。…

2024年广东省网络系统管理样题第1套网络搭建部分

2024年广东省职业院校技能大赛样题1 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx&#xff1a;liuliu5488233 网络系统管理赛项 模块A&#xff1a;网络…

操作系统(第四周 第二堂)

目录 回顾 进程运行 进程的创建 进程的工作 举例 进程的删除 举例1&#xff08;走到return 0结束&#xff09; 举例2&#xff08;利用exit&#xff08;1&#xff09;结束&#xff09; 进程通信 共享内存 生产者算法 消费者算法 消息传递 定义 算法实现 总结 回顾…

数据结构--链式队列

一.链式队列的设计思想: 首先一定要理解设计的初衷,就是队头队尾的位置要满足怎么快怎么设计.那么分析如下: 最终我们敲定了入队,出队的时间复杂度都为O(1)的一种设计,也就是第四种设计;当然,头节点的数据域不使用,所以我们设计链式队列的头节点的时候删除数据域即可,链式队列…

了解虚拟路由器冗余协议(VRRP)

虚拟路由器冗余协议&#xff08;VRRP&#xff09;是一种被广泛使用的网络协议&#xff0c;旨在增强网络的可靠性和可用性。对于网络管理员和工程师来说&#xff0c;了解VRRP是确保网络能够实现无缝故障转移和保持不间断连接的关键。本文将深入探讨VRRP的基础知识&#xff0c;包…

ZooKeeper分布式服务与Kafka消息队列+ELKF整合方案

前言 ZooKeeper 是一个分布式的、开放源码的分布式应用程序协调服务&#xff0c;提供配置维护、命名服务、分布式同步、组服务等功能&#xff1b; Kafka 是一个开源的分布式流处理平台&#xff0c;它被设计用来处理实时数据流&#xff0c;包括发布和订阅消息系统、日志收集以…

leetcode经典困难题-接雨水

. - 力扣&#xff08;LeetCode&#xff09; 42. 接雨水 困难 相关标签 相关企业 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,…

单链表详解(无哨兵位),实现增删改查

1.顺序表对比单链表的缺点 中间或头部插入时&#xff0c;需要移动数据再插入&#xff0c;如果数据庞大会导致效率降低每次增容就需要申请空间&#xff0c;而且需要拷贝数据&#xff0c;释放旧空间增容造成浪费&#xff0c;因为一般都是以2倍增容 2.链表的基础知识 链表也是线…

【JavaSE进阶】00-基础语法(13-14章) 01-面向对象 02-数组 03-常用类 04-异常处理

13 第十三章 方法覆盖和多态(Polymorphism)★★★★★ 13.1 章节目标与知识框架 13.1.1 章节目标 理解在什么情况下我们需要进行方法覆盖&#xff1f;掌握在满足什么条件的时候构成方法覆盖&#xff1f;什么是多态&#xff0c;代码怎么写&#xff1f;向上转型和向下转型都是…

知云文献翻译8.2 下载地址及安装教程

知云文献翻译8.2是一款专业的文献翻译软件。它由知云公司开发&#xff0c;旨在帮助用户快速、准确地翻译各种文献和学术资料。 知云文献翻译8.2具备以下主要功能&#xff1a; 多语言翻译&#xff1a;支持多种常见的语言对&#xff0c;如中英、英中、中日、中韩等。用户可以选…

蓝桥杯DFS自练三题-串变换,玩具蛇,分糖果

题目一:串变换 代码解析: #include <iostream> using namespace std; struct Option{int select;int x;int y; }; string S,T; int N,K;//N是串的长度&#xff0c;K是操作指令的大小 Option opt[10];//存储所有的指令 bool vis[10];//标记数组&#xff0c;重要&#xff…

OpenHarmony南向开发案例:【智能门锁】

一. 简介 本demo是基于Openharmony 3.1 Beta本版开发&#xff0c;不仅可以接收数字管家应用下发的指令来控制门锁开启&#xff0c;而且还可以通过数字管家设置不同的开锁密码以及一次性密码&#xff0c;实现给临时用户一个临时密码&#xff0c;保证门户安全。当然除了开锁的功…

MySQL_00001_00000

数据准备 员工表&#xff1a;emp Oracle: create table emp ( empno number(4) not null, ename varchar2(10), job varchar2(9), mgr number(4), hiredate date, sal number(7, 2), comm number(7, 2), deptno number(2) ); insert into em…