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

Redis的持久化机制

多级缓存使用到了一个装饰设计模式:相当于我不影响我之前缓存本身的代码,但是我可以对我的缓存去做增强,因此多级缓存就是采用装饰模式去实现的~!

多级缓存可以采用装饰模式去重构~!

Redis当中的持久化机制:Redis当中提供了持久化机制,它会把内存当中的数据备份在磁盘当中!磁盘当中的文件当你出现断电、宕机之后,在你重启Redis时,它会把磁盘当中的文件再加载到内存当中,从而保证你的数据可以不丢失!

持久化机制可以保证即使Redis进程在写入数据时崩溃,数据也不会丢失~!

Redis的持久化机制有两种方案:RDB和AOF!

持久化机制 - RDB持久化

  • RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照,是Redis默认的持久化方式。
  • 简单来说就是把/将Redis内存当中的所有数据以二进制形式都记录/保存到磁盘当中,当Redis实例发生故障重启后,此时会从磁盘读取快照文件并加载到内存当中,从而来恢复数据。
  • Disk:磁盘   DB  loaded  from  disk
  • RDB备份文件:dump.rdb => 保存的都是二进制形式的数据
  • 快照文件称为RDB文件,保存了最后一次生成快照时Redis当中的所有数据,默认是保存在当前运行目录!

RDB持久化的执行时机

RDB持久化在四种情况下会执行:被动操作(一二三) + 主动操作(四)

  • 一和二都是手动触发快照操作,让Redis去做一个备份! 
  1. 手动调用执行save命令, 可以立即执行一次RDB:DB saved on disk:保存在磁盘上,save指令是由Redis的主进程来执行RDB备份操作,由于Redis的工作线程是单线程,如果执行save指令则会阻塞其他所有命令的执行,因此不建议使用!只有在数据迁移时可能用到Redis为了规避这个问题,又给我们提供了另外一个指令:bgsave!
  2. 手动调用执行bgsave命令,异步执行RDB:bg指的是background,后台运行,bgsave指令会开启独立的子进程来执行RDB备份操作,从而避免主进程受到影响,主进程可以持续处理用户请求,不受影响。
  3. Redis停机(关闭Redis服务器)时会执行一次save命令,执行RDB备份操作,实现RDB持久化:Saving the final RDB snapshot before exiting. 在退出之前保存最后的RDB快照。但是注意:如果突然断电则不执行RDB备份操作,主动关闭Redis服务器才会执行~!

4. 触发RDB条件时:在Redis内部有触发RDB的机制,可以在redis.conf文件中找到,格式如下:

  • RDB:把内存当中的数据直接备份到RDB文件当中~! 
# 900秒内,如果至少有1个key被修改,则执行bgsave命令来指定RDB备份操作 如果是save "" 则表示禁用RDB
save 900 1  如果900s内有一个Key发生变化被修改,就触发一次RDB
save 300 10 如果300s内有十个Key发生变化,就触发一次RDB
save 60 10000 如果60s内有一万个Key发生变化(代表60s内至少执行10000次修改责编触发RDB),就触发一次RDB

RDB的其它配置也可以在redis,conf文件中设置:

# 是否对RDB备份文件做压缩处理,降低RDB文件的体积
# 建议不开启,压缩也会消耗cpu,影响Redis的性能磁盘的话不值钱
rdbcompression yes# RDB文件名称
dbfilename dump.rdb  # RDB文件保存的路径目录   ./表示当前目录
dir ./ 

RDB的缺点

  • 如果发生断电,则RDB会存在丢失数据的风险:上一次触发了RDB,下一次还没来得及触发突然发生断电了,两次RDB之间写入数据就有丢失的风险;
  • RDB它是将内存当中的数据以及快照直接保存在磁盘当中, 写RDB文件比较耗时,耗费性能~!前提是你的内存当中存储的数据量比较大!

持久化机制 - AOF持久化

  • AOF全称为Append-Only File(追加文件)。
  • AOF备份文件:appendonly.aof  
  • AOF持久化是将Redis服务器处理的每一个写命令/写操作(set命令 => 只记录影响数据变化的指令 => 增删改的)都会追加记录在AOF文件的末尾,以文本格式记录了Redis服务器收到的每个写操作的命令,可以看做是命令日志文件。 
  • 当Redis需要恢复数据时,只需重新执行AOF文件中的命令即可。
  • AOF持久化可以提供更高的数据安全性,因为在每次写操作后都会追加到AOF文件中,避免了数据丢失的风险。

AOF默认是关闭的,需要修改redis.windows.conf配置文件来开启AOF:

# 是否开启AOF持久化功能,默认是no,是关闭的,如果需要开启AOF持久化,则需要将no改为yes
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"

AOF的命令记录的频率也可以通过redis.windows.conf文件来配:  

# 表示每执行一次写命令,立即记录到AOF文件(写一次,保存一次)
appendfsync always 
# sec是second-秒的简写,写命令执行完先放入AOF缓冲区,然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
appendfsync everysec 
# 写命令执行完先放入AOF缓冲区,由操作系统决定何时将缓冲区内容写回磁盘
appendfsync no
AOF的三种同步策略对比:  

AOF文件重写

  • 因为是记录命令,AOF文件会比RDB文件大的多而且AOF会记录对同一个Key的多次写操作,但是只有最后一次写操作才有意义。 
  • 因此Redis给我们提供了一条命令,通过执行bgrewriteaof命令 => 对AOF日志进行重写,可以让AOF文件执行重写功能,AOF文件重写是Redis中一种优化AOF持久化机制的操作,它重新创建一个更小的AOF文件来替代原有的AOF文件,从而达到减轻磁盘空间占用和提高读取性能的目的,通过消除 / 删除已过期或已删除的数据的命令 => 只会记录该Key的最后一次修改,用最少的命令达到相同效果,从而在一定程度上去降低AOF日志文件的体积。
  • AOF文件重写的过程并不是简单的对原有的AOF文件进行压缩或者整理,而是通过读取内存中的数据来重建一个新的AOF文件,它会遍历Redis当前内存中的数据并将其以命令的形式写入到新的AOF文件中,整个过程不受原有AOF文件的影响,因此可以消除原AOF文件中已过期或已删除的数据。
AOF文件重写的触发方式有两种:
  1. 手动触发:通过发送bgwriteaof命令给Redis服务器,从而来手动触发AOF文件重写。
  2. 自动触发:通过设置redis.conf配置文件中的auto-aof-write-percentage和auto-write-min-size参数来配置自动触发AOF文件重写的条件。Redis也会在触发阈值时自动去重写AOF文件,当AOF文件的大小比上次文件增长超过指定的百分比 ,或者AOF文件的体积大小超过指定的最小体积时,Redis会自动触发AOF文件重写。
# AOF文件比上次文件 增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写 
auto-aof-rewrite-min-size 64mb 

需要注意的是:AOF文件重写是一个耗时且消耗CPU资源的操作,可能会对Redis服务器产生负载,因此在生成环境中需要谨慎使用。

RDB和AOF对比

维度RDBAOF
持久化方式定时对整个内存做快照记录每一次执行的写命令
数据完整性不完整,两次备份之间会丢失相对完整,取决于刷盘策略
文件大小会有压缩,文件体积小记录命令,文件体积很大
宕机恢复速度很快
数据恢复优先级低,因为数据完整性不如aof高,因为数据完整性更高
系统资源占用高,大量cpu和内存消耗低,主要是磁盘io资源,但aof重写时会占用大量cpu和内存资源
使用场景可以容忍数分钟的数据丢失,追求更快的启动速度对数据安全性要求较高常见

RDB和AOF各有自己的优缺点,可以选择同时启用RDB和AOF持久化,这样在Redis重启时可以使用RDB文件加载数据,通过重放AOF文件中的命令来实现数据的完整性和一致性~!

相关文章:

Redis的持久化机制

多级缓存使用到了一个装饰设计模式:相当于我不影响我之前缓存本身的代码,但是我可以对我的缓存去做增强,因此多级缓存就是采用装饰模式去实现的~! 多级缓存可以采用装饰模式去重构~! Redis当中的持久化机制&#xff…...

mac装不了python3.7.6

今天发现一个很奇怪的问题 但是我一换成 conda create -n DCA python3.8.12就是成功的 这个就很奇怪...

仿写知乎日报第三周

新学到的 本周新学习了FMDB数据库,并对Masonry的使用有了更近一步的了解,还了解了cell的自适应高度 FMDB数据库的介绍和使用:iOS——FMDB的介绍与使用 cell自适应高度和Mansonry自动布局 本周写了评论区,在写评论区的时候&…...

Godot Best practices

Get Forward Vector transform.x # 等价手算 var rad node.rotation var forward Vector2(cos(rad), sin(rad))Await and Unity Style Coroutine func coroutine(on_update: Callable, duration: float 1):var elapse_time 0while elapse_time < 1:elapse_time get_p…...

win10 + cmake3.17 编译 giflib5.2.1

所有源文件已经打包上传csdn&#xff0c;大家可自行下载。 1. 下载giflib5.2.1&#xff0c;解压。 下载地址&#xff1a;GIFLIB - Browse Files at SourceForge.net 2. 下载CMakeLists.txt 及其他依赖的文件 从github上的osg-3rdparty-cmake项目&#xff1a; https://github.…...

【rust/esp32】初识slint ui框架并在st7789 lcd上显示

文章目录 说在前面关于slint关于no-std关于dma准备工作相关依赖代码结果参考 说在前面 esp32版本&#xff1a;s3运行环境&#xff1a;no-std开发环境&#xff1a;wsl2LCD模块&#xff1a;ST7789V2 240*280 LCDSlint版本&#xff1a;master分支github地址&#xff1a;这里 关于s…...

精通Nginx(05)-http工作机制、指令和内置变量

http服务是Nginx最原始的服务,搞清楚其工作机制非常有利于弄懂nginx是如何工作的。 Nginx核心模块为ngx_http_core_module。 目录 http工作机制 配置结构 工作机制 http常用指令 http server listen server_name location 优先级 "/"的特殊用法 root/a…...

用于 GaN-HEMT 功率器件仿真的 TCAD 方法论

目录 标题&#xff1a;TCAD Methodology for Simulation of GaN-HEMT Power Devices来源&#xff1a;Proceedings of the 26th International Symposium on Power Semiconductor Devices & ICs(14年 ISPSD)GaN-HEMT仿真面临的挑战文章研究了什么文章的创新点文章的研究方法…...

Web3公链之Cosmos生态的项目Celestia

文章目录 Web3公链之Cosmos生态的项目&#xff1a;模块化区块链Celestia什么是CelestiaCelestia网络架构数据可用性问题有哪些可用的解决方案&#xff1f; 发展历史运行节点参考 Web3公链之Cosmos生态的项目&#xff1a;模块化区块链Celestia 什么是Celestia 官网&#xff1a…...

vue+prismjs 网页代码高亮插件

最近在使用wangEditor的过程中发现编辑器中代码块展示没有问题&#xff0c;但是预览编辑器中的内容样式丢失&#xff0c;看过wangEditor的文档后发现用到了Prism.js&#xff0c;现将使用的经验分享。 使用步骤 1、安装prismjs插件 // 1. 安装prismjs 插件 npm install prismj…...

【软件测试】其实远远不止需求文档这么简单

我们都知道&#xff0c;软件测试是一门依赖性很强的综合技术&#xff0c;软件测试工程师在施行自己的工作时&#xff0c;总是要依赖其他团队的产出。 比如&#xff0c;我们要依赖着需求团队给出的需求分析说明书来确定测试的方向&#xff0c;又要依赖开发团队产出的实际代码产品…...

SAP-PP-常用TCODE

PP主数据管理MM01/MM02物料主数据维护/修改 MM17物料主数据部分字段批量修改 /sapapo/mat1PPDS查看物料主数据 /sapapo/Res01PPDS查看资源主数据 BOM管理CS01/CS02维护/修改/删除BOM 超级BOM涉及到物料分类类型001 &#xff0c;CT04 创建特性&#xff0c;CL01 创建类 工作中…...

第六章认识Node.js服务器开发

目录 Node.js同步和异步编程 基本概念 执行方式 获取异步API的返回值 网页基础扩展 项目 Node.js同步和异步编程 基本概念 同步API(应用程序编程接口)是指只有当前API执行完毕后才能继续执行下一个API。形象的说同步模式就是一个服务员在某一个时间段内只服务一个客人…...

Ubuntu 增加服务 比如openfire

在Ubuntu上&#xff0c;可以使用systemd来管理和配置服务。下面是将命令添加为服务的一般步骤&#xff1a; 创建一个.service文件&#xff0c;该文件描述了您要添加的服务。打开终端&#xff0c;并使用以下命令创建一个新的服务文件&#xff1a; sudo nano /etc/systemd/syst…...

海康Visionmaster-全局变量:全局变量关联流程中具体 模块结果的方法

将视觉流程中模板匹配算法模块运行的结果数据&#xff1a;特征匹配点 X 关联全局变量 MatchResultX。 在流程运行的主界面中&#xff0c;按照下面 1&#xff0c;2&#xff0c;3&#xff0c;4 步骤操作&#xff0c;第一步选中算法模块&#xff0c;第二步择模块结果 Tab 页&#…...

Eureka介绍和使用

Eureka介绍和使用 一、基本介绍1. Eureka是什么?2. Eureka的作用3. 常用使用场景4. Eureka的工作原理5. Eureka的优点6. 使用Eureka的注意事项 二、eureka配置项解释1. eureka.instance.hostname2. eureka.instance.appname3. eureka.instance.instance-id4. eureka.client.se…...

Incremental Object Detection via Meta-Learning【论文解析】

Incremental Object Detection via Meta-Learning 摘要1 介绍2 相关工作3 方法3.1 问题描述3.2元学习梯度预处理3.3增量式目标检测器摘要 摘要:在真实世界的情境中,目标检测器可能会不断遇到来自新类别的物体实例。当现有的目标检测器应用于这种情景时,它们对旧类别的性能会…...

AI大模型时代网络安全攻防对抗升级,瑞数信息变革“下一代应用与数据安全”

AI与大模型技术加速普及&#xff0c;安全领域也在以创新视角聚焦下一代应用安全WAAP变革&#xff0c;拓展新一代数据安全领域。近日瑞数信息重磅发布了瑞数全新API扫描器、API安全审计、数据安全检测与应急响应系统及分布式数据库备份系统四大新品。此次发布在延续瑞数信息Bot自…...

后端接口接收对象和文件集合,formdata传递数组对象

0 问题 后端接口需要接收前端传递过来的对象和文件集合&#xff1b;对象中存在数组对象 1 前端和后端 前端只能使用formdata来传递参数&#xff0c;后端不使用RequestBody注解 2 formdata传递数组对象 2.1 多个参数对象数组 addForm: {contactInfo: [{contactPerson: ,…...

python json包

当前大语言模型比较火热&#xff0c;很多数据是以json格式进行数据传递的。python包中的json包就是一个处理Json格式数专业包。 本文主要介绍这个包中的四个函数&#xff0c;dump,dumps,load,loads 序列化为Json dump&#xff1a;将Python对象序列化为Json文件 案例 我们有如…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...