详解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 …...
从零到量产:手把手教你用U-Boot MMC命令为i.MX6ULL板卡烧录完整系统镜像
从零到量产:手把手教你用U-Boot MMC命令为i.MX6ULL板卡烧录完整系统镜像 在嵌入式产品开发中,系统镜像的烧录是连接硬件与软件的关键环节。对于采用NXP i.MX6ULL处理器的设备而言,掌握U-Boot的MMC命令操作不仅能提升开发效率,更能…...
用Python复现SRM隐写分析:从残差计算到34671维特征提取的保姆级教程
用Python复现SRM隐写分析:从残差计算到34671维特征提取的保姆级教程 在数字图像安全领域,SRM(Spatial Rich Model)作为空域富模型隐写分析的黄金标准,其高达34671维的特征向量构建过程常令研究者望而生畏。本文将用Pyt…...
科研效率提升:如何用Zotero插件批量追踪文献引用量?
科研效率革命:用Zotero Scholar Citations打造智能文献追踪系统 在科研工作中,文献引用量不仅是学术影响力的直观体现,更是研究者评估自身成果价值的重要指标。传统手动查询方式效率低下,而Zotero Scholar Citations插件则为这一痛…...
CILQR:自动驾驶约束优化的突破性算法实现指南 [特殊字符]
CILQR:自动驾驶约束优化的突破性算法实现指南 🚗 【免费下载链接】Constrained_ILQR 项目地址: https://gitcode.com/gh_mirrors/co/Constrained_ILQR 在自动驾驶技术快速发展的今天,约束迭代线性二次调节器(Constrained …...
哔哩下载姬downkyi:如何用5分钟解决B站视频下载的三大痛点
哔哩下载姬downkyi:如何用5分钟解决B站视频下载的三大痛点 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&a…...
VSCode + Clangd:打造Linux内核与嵌入式开发的智能代码导航环境
1. 为什么选择VSCode Clangd组合 作为一名长期深耕嵌入式开发的工程师,我经历过各种代码编辑器的折磨。从早期的Source Insight到Eclipse,再到后来的Vim配置大战,直到遇见VSCode Clangd这个黄金组合,才算真正找到了开发Linux内核…...
别再傻傻穷举了!用Python的`crc32`库和`itertools`高效爆破短字符串CRC(性能优化指南)
突破性能瓶颈:Python高效CRC32爆破实战指南 当我们需要逆向还原短字符串时,CRC32爆破是个常见但耗时的操作。传统多层嵌套循环在面对4字节以上字符串时性能急剧下降——在我的实际测试中,4字节全字符集爆破耗时超过3分钟,而5字节则…...
AI 日报 - 2026年4月20日
🔬 科技类 5 条1. 人形机器人半马北京亦庄夺冠:"闪电"以50分26秒打破人类纪录4月19日,2026北京亦庄人形机器人半程马拉松赛正式开跑,齐天大圣队的"闪电"机器人以50分26秒净用时冲线夺冠,真的跑赢了…...
别再只盯着参数量了!用thop给你的PyTorch模型(比如YOLOv8)算算真正的计算开销
别再只盯着参数量了!用thop给你的PyTorch模型(比如YOLOv8)算算真正的计算开销 在AI模型开发中,参数量(Params)常被视为衡量模型复杂度的黄金标准。但当你尝试将模型部署到边缘设备时,可能会发现…...
Dify API密钥越权访问事件频发?揭秘内置Permission Engine的4层拦截机制及绕过反制方案
第一章:Dify权限管控体系全景概览Dify 的权限管控体系以“角色驱动、资源隔离、细粒度控制”为核心设计原则,覆盖应用、数据集、模型、知识库及团队协作全生命周期。该体系并非仅依赖静态角色分配,而是通过策略引擎动态评估用户操作上下文&am…...
