详解Redis的持久化RDB和AOF
Redis的持久化是将内存中的数据同步到硬盘的过程
具体来说,Redis支持两种主要的持久化方式:RDB 和 AOF。
RDB(Redis Database)
简介
默认持久化方式
RDB会将内存中的数据快照保存到磁盘上的一个二进制文件中。这个文件包含了Redis在某个时间点上的所有数据,包括键值对及其过期时间等信息。
优缺点
RDB的优点在于文件紧凑、占用空间较小,且恢复数据速度快。
缺点是可能会丢失最后一次快照之后的所有数据,并且在数据恢复时需要加载整个文件,这可能会导致较长的恢复时间。
save 和 bgsve
RDB的触发分为手动触发和自动触发两种。手动触发可以通过执行SAVE或BGSAVE命令来完成,而自动触发则是通过配置文件设置相关规则实现的。
在执行SAVE命令时,Redis会阻塞所有客户端命令,直到持久化过程完成。
而BGSAVE命令则通过创建子进程来进行持久化操作,这样主进程可以继续处理客户端请求。
使用场景
RDB持久化适用于能够容忍一定数据丢失的场景,比如非关键数据的备份,或者作为其他持久化策略(如AOF)的补充。由于RDB在某个时间点提供数据的快照,它恢复数据的速度比AOF更快。
性能
虽然RDB在持久化过程中会占用一些时间和资源,但是只有在触发持久化的时候才会发生性能开销,而在平时不会影响Redis的性能。
恢复
当系统崩溃后重启Redis时,RDB文件可以被用来恢复到最近一次持久化时的数据状态。由于RDB文件是压缩的二进制文件,其加载速度通常比较快。
AOF(Append Only File)
简介
AOF持久化是一种追加日志的方式,它会将Redis接收到的每个写命令追加到一个日志文件中。
这个日志文件以文本形式记录了Redis服务器所执行的所有写操作指令,如键的创建、更新和删除等。这种机制保证了即使在系统故障的情况下,只要AOF文件存在,就可以通过重新执行这些命令来恢复数据到最近的状态。
优缺点
AOF的优点在于数据更加完整和安全,因为每个写操作都被记录下来,而且可以按照不同的策略进行持久化,如每秒同步或每个写命令同步。
其缺点是文件较大,占用的磁盘空间比RDB要大,且恢复数据速度相对较慢,因为需要重新执行日志文件中的所有命令。
开启方式
要启用AOF持久化,需要在Redis配置文件redis.conf中将appendonly选项设置为yes。一旦开启,Redis会根据设定的写入策略将写命令同步到AOF文件。
常用策略
策略包括:
- always:每个写操作后立即同步,提供最高的数据安全性,但性能影响最大。
- everysec(默认):每秒同步一次,平衡了性能和数据安全性。
- no:由操作系统决定何时同步,性能最好,数据安全性最低。
性能
AOF文件会随着时间不断增长,为了效率和性能,Redis还提供了AOF文件重写机制。重写过程会创建一个新的AOF文件,该文件记录了恢复当前数据集所需的最小写命令集。这个过程可以手动触发或根据配置文件中设置的规则自动进行。
与RDB相比,AOF提供了更好的数据安全性,因为它记录了每个写操作,从而在理论上可以实现对数据的逐条恢复。但是,这也意味着在相同的数据量下,AOF文件的大小通常会比RDB文件大,并且加载AOF文件以恢复数据的过程可能比RDB慢。
AOF的工作流程
Redis的AOF持久化工作流程涉及到命令的写入、缓冲、同步以及文件的重写等关键步骤
开启AOF:需要在Redis配置文件中将appendonly选项设置为yes以启用AOF持久化。AOF文件名默认为appendonly.aof,但可以通过appendfilename参数进行设置,而文件存储的目录可以通过dir参数配置。
命令写入AOF缓冲区:当客户端发送写操作时,这些操作首先会被追加到服务器端的AOF缓冲区(aof_buf)中。这样做可以在一定程度上提高性能,因为写操作首先在内存中完成,而不是直接写入磁盘。
文件同步:根据配置的写入策略,如always、everysec或no,系统会定期或在每次写操作后将缓冲区中的数据同步到AOF文件中。这个同步过程确保了数据的持久化。
缓冲区写回策略:AOF持久化提供了多种缓冲区写回策略,包括始终将数据立即写入磁盘的策略,以及每秒写入一次或由操作系统决定何时写入的策略。这些策略在保证数据安全性的同时,也考虑了性能的影响。
AOF文件重写:为了优化AOF文件的大小和效率,Redis会定期进行AOF文件重写。重写过程中,Redis会创建一个新的AOF文件,仅包含恢复当前数据集所需的最小命令集,从而减少文件的大小并提高加载速度。
重启加载:Redis 服务器重启可以对AOF文件加载进行数据恢复。
RDB和AOF如何选择
在选择Redis的持久化方式时,通常建议结合使用AOF和RDB以达到最佳的数据安全性和恢复速度。
数据安全性:AOF通过记录每个写操作来提供更高的数据安全性,因为它能够保证在系统崩溃后不会丢失最近的操作。而RDB在某个时间点提供数据的快照,可能会丢失最后一次快照之后的所有数据。
恢复速度:RDB的恢复速度通常比AOF更快,因为它只需要加载单个压缩的二进制文件。但如果同时使用AOF和RDB,Redis会优先使用AOF来恢复数据,因为AOF保存的文件更完整。
性能影响:AOF在写入时可能会对性能产生一定影响,尤其是在重写过程中。使用everysec策略可以在一定程度上平衡可靠性和性能。RDB的性能影响主要发生在创建快照时,但这可以通过配置自动触发时间和手动触发来控制。
用例场景:如果数据不是非常敏感,可以从其他地方重新生成,那么可以选择关闭持久化。如果数据比较重要但能够承受几分钟的数据丢失(如缓存),可以只使用RDB。对于需要高数据完整性的场景,建议同时开启AOF和RDB。
存储空间:AOF文件通常会比RDB文件大,因为它记录了每个写命令。存储空间的限制也可能影响持久化方式的选择。
维护和管理:AOF文件可能需要定期进行重写以避免过大,而RDB的维护相对简单,因为它只需要在某些策略下自动或手动触发快照。
相关文章:
详解Redis的持久化RDB和AOF
Redis的持久化是将内存中的数据同步到硬盘的过程 具体来说,Redis支持两种主要的持久化方式:RDB 和 AOF。 RDB(Redis Database) 简介 默认持久化方式 RDB会将内存中的数据快照保存到磁盘上的一个二进制文件中。这个文件包含了…...
详细分析Js中的Promise.all基本知识(附Demo)
目录 1. 基本知识2. Demo3. 实战 1. 基本知识 Promise.all 是 JavaScript 中的一个方法,它接受一个由 Promise 对象组成的数组作为参数,并在所有 Promise 对象都变为 resolved(已完成)状态时才返回一个新的 Promise 对象…...
const,static深度总结——c++穿透式分析
前言;c类和对象的知识点中除了几种默认函数, 比较重要的还有使用const和static修饰成员相关知识点。const在c中特性很简单。 但是在使用中, 比较容易疏忽大意出现问题。 static特性也很简单, 但是比起const来要直接的多。 在使用中…...
快速搭建一个一元二次方程flask应用
新建flask_service目录、templates子目录 flask_service —— app.py —— templates —— —— index.html app.py from flask import Flask, request, jsonify, render_template import random import matplotlib.pyplot as plt from io import BytesIO import base64app F…...
O2OA红头文件流转与O2OA版式公文编辑器基本使用
O2OA开发平台在流程管理中,提供了符合国家党政机关公文格式标准(GB/T 9704—2012)的公文编辑组件,可以让用户在包含公文管理的项目实施过程中,轻松地实现标准化公文格式的在线编辑、痕迹保留、手写签批等功能。并且可以…...
软件测试:C++ Google Test单元测试框架GTest
目录 编译和安装框架使用AssertionsGoogle TestingGoogle MockingMatchersActions 运行结果 最近在写项目的时候,学到了许多关于软件测试的知识,也不断的使用新的测试框架和测试工具,每次总是机械式的拼接其他人的代码,代码发生错…...
大数据面试题 —— HBase
目录 什么是HBase简述HBase 的数据模型HBase 的读写流程HBase 在写的过程中的region的split的时机HBase 和 HDFS 各自的使用场景HBase 的存储结构HBase 中的热现象(数据倾斜)是怎么产生的,以及解决办法有哪些HBase rowkey的设计原则HBase 的列…...
SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测
SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现GWO-TCN-BiGRU-Attention灰狼算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…...
SpringMVC的执行原理
SpringMVC的执行原理可以简单地概括为以下几个步骤: 客户端发送请求:客户端(一般是浏览器)发送HTTP请求到服务器,请求特定的URL资源。 前端控制器(DispatcherServlet)接收请求:在Sp…...
Qt + HTTP 线程交互类封装
介绍 QT的HTTP模块封装的交互类,线程运行。使用时添加自己的业务逻辑即可 代码 头文件 /*** file httpcontroller.h* brief 云台相机的协议交互类* author xintong-zhou* date 2024-03-13*/#ifndef HTTPCONTROLLER_H #define HTTPCONTROLLER_H#include <QNet…...
GitHub Copilot+ESP开发实战-串口
上篇文章讲了GitHub Copilot在应用中可能遇到的问题,接下来小启就简单介绍下GitHub Copilot在ESP32开发中C语言实现串口功能,感兴趣的可以看看。 一、向Copilot提问: 1. ESP32用C语言实现串口初始化; 2.配置uart为1,…...
C# 使用ffmpeg将图片保存为mp4视频
使用 FFmpeg 这个强大的多媒体处理工具,可以轻松地将一系列图片转换为一个 MP4 视频文件。以下是一个基本的命令行示例来完成这个任务: ffmpeg -framerate 25 -i image-%03d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 命令参数说明…...
Java安全技术及代码审计技巧
概述 Java安全编码和代码审计是确保Java应用程序安全性的重要环节。本文旨在介绍Java中常见的Web漏洞、安全编码示例以及一些常见漏洞函数,并提供一个自动化查找危险函数的Python脚本。 1. XML外部实体 (XXE) 漏洞 介绍 XML文档结构包括XML声明、DTD文档类型定义&…...
C# 使用OpenCvSharp4将Bitmap合成为MP4视频的环境
环境安装步骤: 在VS中选中项目或者解决方案,鼠标右键,选择“管理Nuget包”,在浏览窗口中搜索OpenCVSharp4 1.搜索OpenCvSharp4,选择4.8.0版本,点击安装 2.搜索OpenCvSharp4.runtime.win,选择4.8.0版本,点…...
[游戏开发][Unity] 导出Xcode工程,完成调试与发布
Unity导出Xcode工程(模拟器版本与真机调试) [游戏开发][Unity] 打包Xcode工程模拟器真机调试_unity5 打包xcod-CSDN博客 Unity导出发布版本Xcode工程,上传app到官网,正式发布或创建TestFlight Xcode发布AppStore与TestFlight全流程_xcode 上传到testfit-…...
JSONP 实现跨域请求案例
后端使用 express 搭建,案例代码如下: const express require(express)const app express() const PORT 3000app.get(/data, (req, res) > {const jsonData {name: Alan,age: 666,city: GD}const callback req.query.callback // 获取前端中的回…...
2024年智慧城市、人文发展与区域经济国际会议(ICSCCDRE 2024)
2024年智慧城市、人文发展与区域经济国际会议(ICSCCDRE 2024) 2024 International Conference on Smart Cities, Cultural Development and Regional Economy 会议简介: 城市经济人文发展是一个综合性的过程,它关注城市在经济、…...
目标检测——PP-YOLO算法解读
PP-YOLO系列,均是基于百度自研PaddlePaddle深度学习框架发布的算法,2020年基于YOLOv3改进发布PP-YOLO,2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet,2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列,所以放一起解…...
多特征变量序列预测(11) 基于Pytorch的TCN-GRU预测模型
往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测ÿ…...
Lvs+keepalived+nginx搭建高可用负载均衡集群
环境配置 master主机192.168.199.149,虚拟IP192.168.199.148 back备机192.168.199.150 真实服务器1 192.168.199.155 真实服务器2 192.168.199.156 关闭防火墙和selinux master配置(149) 添加虚拟IP ip addr add 192.168.199.148/24 …...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
