最新Redis7持久化(权威出版)

2023-12-11 10:28

本文主要是介绍最新Redis7持久化(权威出版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先我们要知道什么是持久化:持久化是指将数据保存到磁盘上,以确保在Redis服务器重启时数据不会丢失。

Redis支持两种主要的持久化方式:RDB持久化AOF持久化

下面让我依次给你介绍一下:

RDB持久化

作用

这是将Redis数据保存到磁盘的一种方式,RDB持久化通过在指定时间间隔内将数据集快照写入磁盘中。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证.
这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。

案例演示
自动触发

在我们Redis7中

我们可以看到执行的RDB条件

在1600秒内,如果有至少1个键被修改,则执行快照 

在300秒内,如果有至少10个键被修改,则执行快照

在60秒内,如果有至少10000个键被修改,则执行快照

这个条件对于我们演示案例过于苛刻,所以我们修改成5秒2次修改

修改文件保存路径

现在我们在5秒内修改两个数据:

当我们超过5秒添加两个数据:

恢复文件

备份成功后故意用flushdb清空redis,看看是否可以恢复数据

结论:执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义

手动触发

为什么需要手动触发呢?因为实际生产中需要某个时刻添加一个在重要数据,需要立刻保存就需要手动触发了。

Redis提供了两个命令来生成RDB文件,分别是savebgsave

我们可以看一下官方文档:

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

bgsave

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

官方说明:

Redis会使用bgsave对当前内存中的所有数据做快照这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据

其fork就是在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,尽量避免膨胀。

我们可以通过lastsave获取最后一次成功获取快照的时间

RDB优点

官网说明:

总结:

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

RDB缺点

官网说明:

总结:

  • 在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失
  • 内存数据的全量同步,如果数据量太大会导致I/0严重影响服务器性能
  • RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟。fork的时候内存中的数据被克隆了一份,大致2倍的膨胀性,需要考虑

检查修复durp.rdb文件

哪些情况会触发RDB拍照

  1. 配置文件中的默认的拍照配置
  2. 手动save/bgsave
  3. 执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
  4. 执行shutdown且没有设置开启AOF持久化
  5. 主从复制时,主节点自动触发

如何禁用快照

动态所有停止RDB保存规则的方法: redis-cli config set save

修改配置:

AOF持久化

官网介绍:

说明:

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

默认情况下,redis是没有开启AOF(append only file)的。开启AOF功能需要设置配置: appendonly yes

工作流程:


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

三种写回策略:

  • Always:同步写回,每一个命令执行完立刻同步的将日志写回磁盘
  • everysec:每秒写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,每隔1秒把缓冲区中的内容写入磁盘
  • no:操作系统控制的写回,每个写命令执行完,只是先把日志写到AOF文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘

案例演示
开启AOF

AOF文件保存路径

在redis7之前:AOF保存文件的位置和RDB保存文件的位置一样都是通过redis.conf配置文件的 dir 配置

在redis7之后:AOF文件保存路径变成了dir(rdb保存路径)+appenddirname

AOF文件保存名称

在redis7之前:

在redis7之后:

官方说明:

在Redis7之后将一个AOF文件差分为三个文件:base基本文件、incr增量文件、manifest清单文件

文件恢复
正常恢复

写操作继续,生成的AOF文件到指定的目录

恢复:重启redis然后重新加载

           

 异常恢复               

 故意乱写正常的AOF文件模拟网络闪断文件写error:修改appendonly.aof.1.incr.aof文件

      

此时我们启动redis,发现根本启动不了一点

使用异常修复命令:redis-check-aof --fix

 成功修复:                                                                                                                                                                                             

AOF优缺点   

优点:

官方解释:

概括:更好的保护数据不丢失、性能高、可做紧急恢复

缺点:          

官方解释:

概括:

  • 相同数据集的数据而言AOF文件要远大于RDB文件,恢复速度慢于RDB
  • AOF运行效率低于RDB,每秒同步策略效率较好,不同步频率和RDB相同

AOF重写机制

                ​​​​​​​        

一句话:启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。
由于AOF持久化是Redis不断将写命令记录到 AOF 文件中,随着Redis不断的进行,AOF 的文件会越来越大,文件越大,占用服务器内存越大以及 AOF 恢复要求时间越长。

为了解决这个问题,Redis新增了重写机制,当AOF文件的大小超过所设定的峰值时,Redis就会自动启动AOF文件的内容压缩,

只保留可以恢复数据的最小指令集或者可以手动使用命令 bgrewriteaof 来重新

案例演示

需求说明:

启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。

 举个例子:比如有个key 

一开始你  set k1 v1

然后改成  set k1 v2

最后改成  set k1 v3

如果不重写,那么这3条语句都在aof文件中,内容占空间不说启动的时候都要执行一遍,共计3条命令;

但是,我们实际效果只需要set k1 v3这一条,所以,

开启重写后,只需要保存set k1 v3就可以了只需要保留最后一次修改值,相当于给AOF文件瘦身减肥,性能更好。

AOF重写不仅降低了文件的占用空间,同时更小的AOF也可以更快地被Redis加载。

前期准备

开启AOF

为了演示我们将自动触发调小:

关闭融合:

自动触发

对同一个k不断地赋值:

当我们的内存到了1k的时候,触发重写

手动触发

客户端向服务器发送bgrewriteaof

重写原理

1:在重写开始前,redis会创建一个“重写子进程”,这个子进程会读取现有的AOF文件,并将其包含的指令进行分析压缩并写入到一个临时文件中。

2:与此同时,主进程会将新接收到的写指令一边累积到内存缓冲区中,一边继续写入到原有的AOF文件中,这样做是保证原有的AOF文件的可用性,避免在重写过程中出现意外。

3:当“重写子进程”完成重写工作后,它会给父进程发一个信号,父进程收到信号后就会将内存中缓存的写指令追加到新AOF文件中

4:当追加结束后,redis就会用新AOF文件来代替旧AOF文件,之后再有新的写指令,就都会追加到新的AOF文件中

5:重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似

AOF优化配置项详解

RDB-AOF混合持久化

官网说明


数据恢复顺序和加载流程

在同时开启RDB和AOF的时候,重启只会加载AOF文件,不会加载RDB文件

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​         

对比

RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储

AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以edis协议追加保存每次写的操作到文件未尾

同时开启两种持久化方式

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

RDB的数据不实时,同时使用两者时服务器重启也只会找AOF文件。那要不要只使用AOF呢?

作者建议不要,因为RDB更适合用于备份数据库(AOF在不断变化不好备份),留着rdb作为一个万一的手段

推荐开启混合模式:

开启之后:

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

纯缓存模式

同时关闭RDB+AOF

禁用RDB:save ""

禁用AOF:appendonly no

这篇关于最新Redis7持久化(权威出版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/480352

相关文章

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

49个权威的网上学习资源网站

艺术与音乐 Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。 Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。 Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。 数学,数据科学与工程 Codecad

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

最新OpenStreetMap POI数据(附下载教程)

OSM(OpenStreetMap)POI(Point of Interest)数据是指在OpenStreetMap上标记的各种兴趣点,如餐馆、酒店、公交站、学校等地点。这些数据在地理信息系统(GIS)应用中非常有用,可以帮助进行地图绘制、路径规划以及其他地理分析任务。 这里直接放出下载地址,有需要的可以自行下载,tips:国外城市的数据源质量比国内的要高一些; OpenStreetMap P

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

2024年 Biomedical Signal Processing and Control 期刊投稿经验最新分享

期刊介绍 《Biomedical Signal Processing and Control 》期刊旨在为临床医学和生物科学中信号和图像的测量和分析研究提供一个跨学科的国际论坛。重点放在处理在临床诊断,患者监测和管理中使用的方法和设备的实际,应用为主导的研究的贡献。 生物医学信号处理和控制反映了这些方法在工程和临床科学的界面上被使用和发展的主要领域。期刊的范围包括相关的评论论文(review p

iptables持久化命令:netfilter-persistent save

在Linux上,使用netfilter-persistent命令可以保存iptables防火墙规则,确保它们在系统重启后仍然有效。以下是如何使用netfilter-persistent来保存iptables规则的步骤: 打开终端:首先,你需要打开Linux系统的终端。保存规则:使用netfilter-persistent save命令可以保存当前的iptables规则。这个命令会调用所有插件,将

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所