Redis7(二)Redis持久化双雄

news2024/11/25 12:29:59

持久化之RDB

RDB的持久化方式是在指定时间间隔,执行数据集的时间点快照。也就是在指定的时间间隔将内存中的数据集快照写入磁盘,也就是Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里面。

RDB保存的是dump.rdb文件。

自动触发

默认redis是有三种自动触发的规则,在配置文件中也有注释:

分别是一个小时内有一次变化,五分钟内有100次变化,一分钟内有10000次变化。如果要配置自己的规则,可以在配置文件中写一下语法:

save (time) (changes)

time指的是在多少时间内,单位是秒。

changes指的是变化次数,单位是次。

也可以在一行配置多个规则:

save (time) (changes) (time) (changes) (time) (changes)……

只要redis数据库中存在一定的变化满足了规则,就会进行一次快照

手动触发

手动触发分为两个指令:SAVEBGSAVE

只要执行了这两个指令,就会进行一次快照。

至于这两指令有和区别呢:

SAVE:使用SAVE的时候,在保存快照文件期间,当前redis服务器会被阻塞,将不能正常进行缓存,因为会影响redis的功能的使用,所以通常这个指令不被推荐使用。

BGSAVE:使用BGSAVE的时候,redis会fork出一个子进程来进行持久化,原来的主线程不会被影响,通常推荐使用这个指令

如果要想查看上一次快照的时间,可以使用LASTSAVE指令,步骤按如下:

RDB的优点和缺点

优点:

  1. 适合大规模的数据恢复
  2. 按时业务定时备份
  3. 对数据完整性和一致性要求不高
  4. RDB文件在内存中的加载速度要比AOF快得多

缺点:

  1. 如果Redis意外地down了,就会丢失从当前到最近一次的快照期间的数据,会导致快照文件的丢失
  2. 内存数据的全量同步,如果数据量太大,会导致IO严重影响服务器性能
  3. RDB依赖于主进程的fork,在更大的数据集中,可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,导致两倍的膨胀率

检查修复RDB文件的命令:redis-check-rdb (rdb文件的路径)

快照执行的情况:

  1. 配置文件中默认的快照规则
  2. 手动执行SAVE和BGSAVE命令
  3. 执行了flushall和flushdb命令,但是产生的快照文件是空的
  4. 执行shutdown且没有开启使用AOF
  5. 主从复制时,主节点自动触发

如何禁用快照:动态停止所有RDB保存规则的方法:redis-cli config set save “”

或者在配置文件中写一个 save “”

RDB优化配置项

在配置文件中:

  1. stop-write-on-bgsave-error:默认是yes,如果配置成no,表示不在乎数据不一致或者有其他的手段发现和控制这种不一致,那么在快照写入失败时,也能确保redis继续接收新的写请求。建议使用yes
  2. rdbcompression:默认yes,对于存储到磁盘中的快照,可以设置是否进行压缩存储,如果是的话,redis会采用LZF算法进行压缩。如果不想消耗CPU来进行压缩的话,可以设置关闭次功能。建议使用yes
  3. rdbchecksum:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增大约10%的性能消耗,如果希望获取到最大的性能提示,可以关闭此功能。建议使用yes
  4. rdb-del-sync-files:在没有持久性的情况下删除复制中使用的RDB文件启用。默认情况下是no,此选项是禁用的

持久化之AOF

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

默认情况下,redis并没有开启AOF的开启AOF的功能需要设置配置文件中的appendonly为yes

AOF保存的是appendonly.aof文件

AOF工作流程

  1. Client作为命令的来源,会有多个源头以及源源不断的请求命令
  2. 在这些命令到达Redis Server后并不是直接写入AOF文件,会将这些命令先放入AOF缓存中进行保存。这里的AOF缓冲区实际上是内存中的一片区域,存在的目的是当这些命令达到一定量以后再写入磁盘,避免频繁地磁盘IO操作
  3. AOF缓冲会根据AOF缓冲区同步文件的三种写回策略将命令写入磁盘上的AOF文件
  4. 随着写入AOF的内容的增加,为避免文件膨胀,会根据对着进行命令的合并(又称AOF的重写),从而起到AOF文件压缩的目的
  5. 当Redis Server服务器重启的时候会从AOF文件中载入数据

写回策略,可在配置文件中进行配置appendfsync,有以下三种:

  1. everysec:redis默认为这种方式,每秒写回,每个写命令执行完后,只是把日志写到AOF的内存缓冲区,没隔一秒把缓冲区中的内容写入磁盘
  2. always:同步写回,每个命令执行完后立即同步地将日志写回磁盘(性能影响大)
  3. no:由操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区写回磁盘(容易丢失数据)

在Redis6中,AOF文件分为三种类型:

base:标识基础AOF,一般由子进程通过重写产生,该文件最多只有一个

incr:表示增量AOF,一般会在AOFRW开始执行是被创建,该文件可能存在多个。

history:表示历史AOF,由BASE和INCR变化而来,每次AOFRW成功完成时,本次AOFRW之前对应的base和incr都将变成history,history类型的AOF会被Redis自动删除

为了管理这些AOF文件,引入了一个manifest文件来跟踪、管理这些AOF。同时,为了便于AOF备份和拷贝,我们将所有的AOF文件和mainfest文件放入一个单据的文件目录,目录名由appenddirname配置决定

AOF文件修复命令:redis-check-aof --fix (文件名)

AOF优缺点

优点:

  1. 使用AOF后Redis更加持久,使用每秒读入的方式是当出现异常时,只会出现一秒的数据丢失
  2. AOF日志是一个仅附加日志,不会出现寻道问题,不会因为断电出现损坏,如果因为一些原因出现写到一半结尾了,可以使用redis-check-aof工具来修复文件
  3. 当AOF变得太大时,可以在后台自动重写AOF。
  4. 格式易于理解和解析,易于恢复数据。

缺点:

  1. AOF文件通常比相同数据集的等效RDB文件大
  2. AOF运行效率要慢于rdb(everysec时)

AOF重写机制

由于AOF持久化是Redis不断将写命令记录到AOF文件中,随着Redis不断地进行,AOF文件会越来越大。文件越大,占用服务器内存越大以及AOF恢复要求时间越长。

为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集

自动触发是默认为根据上次重写的AOF大小增长了一倍并且文件大小有64mb时自动进行重写

或者可以手动使用命令bgrewriteaof来重写

最小指令集的案例:

set k1 v2

set k1 v3

set k1 v4

最终只保留set k1 v4

重写原理

  1. 在重写开始前,redis会创建一个”重写子进程“,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。
  2. 与此同时,主进程会将新接收到的指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。
  3. 当”重写子进程“完成重写工作后,会给父进程发一个信号,父进程收到信号后就会将内存中的缓存的写指令追加到新的AOF中
  4. 当追加结束后,redis就会用新的AOF文件来代替旧的AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中
  5. 重写AOF文件的操作,并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件,和快照有点类似

RDB+AOF混合持久化

如果同时开启RDB和AOF,重启时只会加载AOF文件,不会加载RDB文件,如果没有AOF就会加载RDB文件

当redis重启时,会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整

RDB的数据不实时,同时使用两者时服务器重启只会找AOF,但是也建议不要只使用AOF,因为AOF在不断变化不好备份,RDB更适合用于备份数据库,留着RDB作为一个万一的手段

开启混合方式设置:设置aof-use-rdb-preamble的值为yes

混合持久化之后,RDB镜像做全量持久化,AOF做增量持久化

先使用RDB进行快照存储,然后使用AOF持久化所有的写操作,当重写策略满足或者手写触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务的时候会从RDB和AOF两个部分恢复数据,又提高了恢复数据的性能。简单来说:混合持久化方式产生的文件一部分是RDB格式,一部分是AOF格式

纯缓存模式

同时关闭RDB和AOF,Redis只做缓存功能。

在这种情况下,依然可以使用手动触发的方式使用AOF和RDB

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

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

相关文章

记录些Spring+题集(3)

百万QPS下热点数据的收集方案 在高并发场景下,如京东、淘宝的秒杀活动开始时候,会有很多的用户同时抢购秒杀商品,由于同一个场次成百上千种商品参与秒杀活动,但是热点的商品往往就只有那么几十个左右,此时系统的90%的…

linux桌面运维---第八天

1、rm命令: 用法:删除一个文件或者目录。 语法:rm [选项] name... 选项: -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。-r 将目录及以下之档案亦逐一删除。需要进行一一确认 2、ln命令&#…

Lamp 小白菜鸟从入门到精通

前言 “LAMP包”的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流&#xff0…

SpringBoot限制请求访问次数

本篇文章的主要内容是SpringBoot怎么限制请求访问次数。 当我们的服务端程序部署到服务器上后,就要考虑很多关于安全的问题。总会有坏人来攻击你的服务,比如说会窃取你的数据或者给你的服务器上强度。关于给服务器上强度,往往就有高强度给服务…

【ffmpeg入门】安装CUDA并使用gpu加速

文章目录 前言CUDACUDA是什么CUDA 的主要组成部分CUDA 的优点CUDA 的基本编程模型安装CUDA ffmpeg使用gpu加速为什么需要使用gpu加速1. 提高处理速度2. 减少 CPU 负载3. 提高实时处理能力4. 支持高分辨率和复杂编码格式5. 提供更好的可扩展性6. 提高能效 ffmpeg使用gpu加速常用…

在项目中加入 husky + lint-staged + eslint,代码检测格式化

背景 由于日常工作的多人协作中,会因为个人代码编写风格导致代码在不同人电脑上,会有异常代码格式的提示,为了解决这个小问题,我们可以使用 husky lint-staged 来对代码进行一定程度上的格式化,使格式风格统一&#x…

初谈Linux信号-=-信号的产生

文章目录 概述从生活角度理解信号Linux中信号信号常见的处理方式理解信号的发送与保存 信号的产生core、term区别 概述 从生活角度理解信号 你在网上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时, 你该…

【 DHT11 温湿度传感器】使用STC89C51读取发送到串口、通过时序图编写C语言

文章目录 DHT11 温湿度传感器概述接线数据传送通讯过程时序图检测模块是否存在 代码实现总结对tmp tmp << 1;的理解对sendByte(datas[0]/10 0x30);的理解 DHT11 温湿度传感器 使用80C51单片机通过读取HDT11温湿度传感的数据&#xff0c;发送到串口。 通过时序图编写相应…

Windows下lapack的编译

文章目录 LAPACK库LAPACK库的地址LAPACK库的安装和编译 LAPACK库 LAPACK&#xff08;Linear Algebra PACKage&#xff09;库&#xff0c;是用Fortran语言编写的线性代数计算库&#xff0c;包含线性方程组求解&#xff08;AXb&#xff09;、矩阵分解、矩阵求逆、求矩阵特征值、…

javac详解 idea maven内部编译原理 自制编译器

起因 不知道大家在开发中&#xff0c;有没有过下面这些疑问。有的话&#xff0c;今天就一次解答清楚。 如何使用javac命令编译一个项目&#xff1f;java或者javac的一些参数到底有什么用&#xff1f;idea或者maven是如何编译java项目的&#xff1f;&#xff08;你可能猜测底层…

4核16G服务器支持多少人?4C16G服务器性能测评

租赁4核16G服务器费用&#xff0c;目前4核16G服务器10M带宽配置70元1个月、210元3个月&#xff0c;那么能如何呢&#xff1f;配置为ECS经济型e实例4核16G、按固定带宽10Mbs、100GB ESSD Entry系统盘。 那么问题来了&#xff0c;4C16G10M带宽的云服务器可以支持多少人同时在线&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日派对座位安排(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

原神运行闪退报错怎么办解决办法 crossover24运行exe游戏程序错误没反应

对于Mac用户来说&#xff0c;能够在Mac上体验Windows游戏是一种极大的便利。然而&#xff0c;当尝试运行热门游戏《原神》时&#xff0c;一些用户可能会遇到闪退或报错的问题。这不仅影响了游戏体验&#xff0c;也让人倍感挫败。幸运的是&#xff0c;有多种方法可以帮助解决这些…

优化德育评估流程:智慧职校的考核类型设置功能

智慧职校德育管理系统的引入标志着教育领域向着更加智能化、高效化方向迈进的重要一步。其中&#xff0c;考核类型设置功能作为系统的核心模块之一&#xff0c;扮演着不可或缺的角色。这一功能的创新之处在于它赋予了学校前所未有的灵活性和自主权&#xff0c;让教育者能够根据…

PyTorch的自动微分模块【含梯度基本数学原理详解】

文章目录 1、简介1.1、基本概念1.2、基本原理1.2.1、自动微分1.2.2、梯度1.2.3、梯度求导1.2.4、梯度下降法1.2.5、张量梯度举例 1.3、Autograd的高级功能 2、梯度基本计算2.1、单标量梯度2.2、单向量梯度的计算2.3、多标量梯度计算2.4、多向量梯度计算 3、控制梯度计算4、累计…

【香橙派开发板测试】:在黑科技Orange Pi AIpro部署YOLOv8深度学习纤维分割检测模型

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ Orange Pi AIpro开发板相关介绍1.1 &#x1f393; 核心配置1.2 ✨开发板接口详情图1.3 ⭐️开箱展示 二、2️⃣配置开发板详细教程2.1 &#x1f393; 烧录镜像系统2.2 ✨配置网络2.3 ⭐️使用SSH连接主板 三、…

KAFKA搭建教程

KAFKA搭建教程 期待您的关注 KAFKA学习笔记 帮助更多人 目录 KAFKA搭建教程 1.下载Kafka并解压 2.添加环境变量 3.修改 server.properties 文件 4.将kafka复制到其它节点 5.修改node1、node2节点的broker.id 6.将master的环境变量同步到node1、 node2 7.启动zookeeper…

网络需求实验报告

拓扑图 需求 1、通过DHCP服务&#xff0c;给PC4和PC5分配IP地址、网关、掩码、DNS服务器IP地址 2、Client-1要求手工配置IP地址&#xff0c;为192.168.1.1, c 3、telnet客户端可以远程登录telnet服务器进行设备管理&#xff0c;并成功修改telnet服务器的名字为123 &#xff0c…

Dev—c++小熊猫6.7.5免费下载攻略

点击蓝字 关注我们 今天我来给大家分享一个Dev—c小熊猫6.7.5免费下载攻略&#xff0c;内容如下 1. https://gitee.com/royqh1979/Dev-CPP/releases/tag/v6.7.5 点进这一个官网&#xff0c;一直往下滑&#xff0c;找到第三个选项&#xff0c;把它下载下来。 2. 安装时一些选择…

phpstorm无法实现代码反向追踪 字体变黄(Ctrl+鼠标左键向上一级追踪)问题解决

方法一、.将项目里面的.idea文件删除掉&#xff0c;重新进入phpstorm&#xff0c;这个时候会重新对项目进行编制索引等操作&#xff0c;就会神奇的发现&#xff0c;可以正常追踪了。 当方法一不行时&#xff0c;可以使用方法二 方法二、File->invalidate Caches 去除缓存