redis的持久化RDB和AOF

redis的持久化有RDB和AOF两种方式。RDB(Redis Database)是redis在指定间隔将当前时间点的内存数据快照保存成一个二级制rdb文件。AOF(Append Only File)是将每一条写指令写入到特定日志文件,然后当服务重启时通过回放这些指令来恢复原来的数据集。redis可以同时开启RDB和AOF。当然如果只是使用redis来当作缓存使用,也可以不开启持久化,RDB和AOF都不开启。

RDB(Redis Database)

默认情况下redis是开启RDB持久化的。将快照文件存储在一个叫dump.rdb的文件。文件名可以通过dbfilename配置项来指定,文件位置可以通过dir配置项来指定。

dbfilename dump.rdb
dir data/6379/

rdb文件的存盘时机可以通过save配置项来配置

save <seconds> <changes>

表示在多少秒内至少有多少个写操作指令发生时触发存盘操作。

如下面默认的配置

#900秒内至少有一次写操作
save 900 1
#300秒内至少有10次写操作
save 300 10
#60秒内至少有10000次写操作
save 60 10000

如果在配置文件中一个save配置也没有,则代表关闭了RDB。

除了通过save配置进行周期性的自动生成RDB文件,还可以通过save和bgsave两个指令来手动触发快照的生成。

快照生成过程:

当Redis触发RDB持久化时,会fork一个子线程用来处理快照生成。这个子进程负责将内存中的数据dump到一个临时rdb文件中。当dump完成后,新的rdb文件会替换原来的rdb文件。

快照生成过程中redis可以处理写操作吗?

rdb持久化的子进程是由主进程fork出来的,可以共享主线程的所有内存数据。bgsave 子进程运行后,开始读取主线程的内存数据,并把它们写入 RDB 文件。而在这个过程中,主线程仍然可以直接修改原来的数据。这里Redis 借助操作系统提供的写时复制技术(Copy-On-Write, COW),如果主线程要修改一块数据,那么,这块数据就会被复制一份,生成该数据的副本。然后,bgsave 子进程会把这个副本数据写入 RDB 文件。

RDB持久化可能会对Redis的性能造成一些影响,特别是在写操作较多的情况下。尽管Redis可以继续处理请求,但创建快照时的I/O操作可能会导致延迟。

AOF(Append Only File)

开启AOF日志比较简单,在配置文件添加如下配置即可

appendonly yes

开启AOF日志后每个写操作都将记录到aof日志文件中。

执行几条写命令

127.0.0.1:6380> set name hello
OK
127.0.0.1:6380> set nums 2
OK
127.0.0.1:6380> set nums 3
OK
127.0.0.1:6380> set nums 4
OK

查看aof日志文件,日志文件在data配置项指定的目录下,文件名是appendonly.aof

set^M
$4^M
name^M
$5^M
hello^M
*3^M
$3^M
set^M
$4^M
nums^M
$1^M
2^M
*3^M
$3^M
set^M
$4^M
nums^M
$1^M
3^M
...

这里看到每个执行的写命令都会记入到AOF日志文件中。

写入策略

AOF通过appendfsync 参数来控制日志持久化到文件的策略,该参数有以下结果选项可以配置:

always:每次写操作都会将 AOF 文件同步到磁盘。这确保了数据的持久性,但会显著增加 I/O 操作,可能影响性能。

everysec:每秒钟将 AOF 文件同步到磁盘一次。这是一个折衷方案,提供了较好的性能和数据持久性。大多数情况下推荐使用这个选项,因为它在性能和数据安全性之间提供了平衡。

no:不强制将 AOF 文件同步到磁盘,而是依赖操作系统的缓存机制。这种设置可能会带来较高的性能,但数据丢失的风险也更大,因为可能会丢失最近未同步到磁盘的操作。

日志重写

AOF日志会将每一个写命令写入日志文件,随着时间的推移,日志文件会越来越大。redis数据集中的数只需要保存最终的结果即最新的结果信息,中间的过程没必要记录,比如一个计数的key从0累计到100中间会有99条set指令是过程记录,如果这些记录在aof中存放,在日志重放过程中也没必要保留,只需要知道当前key值是100即可。这时候就需要日志rewrite来优化AOF日志,基本上一个key使用一个写入命令,来简化AOF日志。

和日志重写相关的配置有以下两个

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • auto-aof-rewrite-percentage:设置触发 AOF 重写的百分比,默认值为 100,意味着 AOF 文件增长了一倍时会触发重写。
  • auto-aof-rewrite-min-size:设置触发 AOF 重写的最小文件大小,默认值为 64MB。

AOF日志重写是由后台线程 bgrewriteaof 来完成的,不会阻塞主线程。

总结

RDB持久化对Redis的性能影响相对较小,因为它是通过创建数据库的快照来实现的。这种方式在生成快照的过程中,Redis会在后台执行,而不会对主线程的操作产生显著影响。RDB文件是经过优化的二进制格式,能够快速加载。相较于AOF文件,RDB在恢复数据时通常比AOF更快,适合需要快速恢复的场景。RDB文件可以方便地用于备份和迁移数据,因为它们是单个文件,易于复制和移动。也适合用于离线备份和灾难恢复。RDB持久化不会像AOF那样持续不断地记录操作日志,因此对磁盘I/O的压力较小,适合对I/O性能有严格要求的场景。RDB提供的数据一致性较好,因为在快照生成时,Redis会冻结数据库状态,使得快照的一致性得到保证。RDB也有一些缺点,比如数据恢复到最近一次快照的时间点可能会丢失一定量的数据。

AOF 通过记录每个写操作来持久化数据,通常可以通过配置将数据丢失降到最小。数据恢复更加精确。AOF 文件可能比 RDB 文件大,恢复速度相对也会比较慢。

在实际应用中,许多 Redis 部署会同时使用 RDB 和 AOF,这样可以兼顾性能和数据安全。通过这种方式,可以利用 RDB 的快速备份和恢复能力,同时通过 AOF 提供更高的数据完整性保障。

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

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

相关文章

fastadmin 文件上传腾讯云

1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…

Linux下快速判断当前终端使用的是bash or csh

在Linux下设置环境变量的时候&#xff0c;可能你也遇到过export: Command not found一类的错误。这是因为当前终端使用的不是bash&#xff0c;如何快速判断当前终端使用的是哪种类型的shell呢&#xff1f; echo $0判断shell类型 最简单的方法就是在终端输入echo $0&#xff0…

每日一题,零基础入门FPGA——工程师在线精讲来咯

传送门&#xff1a;zzfpga.com/StudentPlatform/Train/StudentArticleDetails?id149

M3U8工作原理以及key解密视频流详解

文章目录 前言一、M3U8是什么&#xff1f;二、HLS—M3U8的工作原理1.分段视频流2.生成播放列表3.客户端请求和解析4.片段下载和播放 三、.m3u8文件内部是什么样的&#xff1f;四、简单介绍下AES-128算法五、拿到KEY后如何去解密&#xff1f;1.手动解密.ts文件2.前人栽树&#x…

深度学习速通系列:Bert模型vs大型语言模型(LLM)

什么情况用Bert模型&#xff0c;什么情况用LLaMA、ChatGLM类大模型&#xff1f; 选择使用Bert模型、LLaMA模型或ChatGLM模型等大型语言模型&#xff08;LLM&#xff09;时&#xff0c;应根据具体的应用场景、任务需求、资源限制和预期目标来决定。以下是更详细的指导原则: Be…

WPF 利用视觉树获取指定名称对象、指定类型对象、以及判断是否有验证错误

1.利用视觉树获取指定名称对象 /// <summary> /// Finds a Child of a given item in the visual tree. /// </summary> /// <param name"parent">A direct parent of the queried item.</param> /// <typeparam name"T">T…

spring security 如何解决跨域的

一、什么是 CORS CORS(Cross-Origin Resource Sharing) 是由 W3C制定的一种跨域资源共享技术标准&#xff0c;其目就是为了解决前端的跨域请求。在JavaEE 开发中&#xff0c;最常见的前端跨域请求解决方案是早期的JSONP&#xff0c;但是JSONP 只支持 GET 请求&#xff0c;这是一…

深度学习从入门到精通——基于unet++算法实现细胞分割

模型定义 import torch from torch import nn__all__ [UNet, NestedUNet]class VGGBlock(nn.Module):def __init__(self, in_channels, middle_channels, out_channels):super().__init__()self.relu nn.ReLU(inplaceTrue)self.conv1 nn.Conv2d(in_channels, middle_channe…

FPGA速度优化

速度优化 文章目录 速度优化前言一、时序优化1.1 减少关键路径上的时序1.1.1 关键路径重组1.1.2 解决扇出问题1.1.3 路径上插入寄存器1.1.4 寄存器平衡1.1.5 并行结构1.1.6 消除代码优先级 总结 前言 速度优化&#xff0c;主要就是设计时序进行优化 吞吐量&#xff1a;每个时…

web渗透:RCE漏洞

RCE漏洞&#xff0c;即远程代码执行漏洞&#xff0c;是一种安全缺陷&#xff0c;它允许攻击者通过网络在目标系统上执行任意代码。一旦成功利用&#xff0c;攻击者可以完全控制受影响的系统&#xff0c;包括读取敏感数据、安装恶意软件、修改系统配置等。RCE漏洞通常发生在应用…

数据结构---双向链表---循环链表---栈

目录 一、双向链表 1.1.创建双向链表 1.2.头插法 1.3.尾插法 1.4.查询节点 1.5.修改节点 1.6.删除节点 1.7.打印节点 1.8.销毁链表 二、循环链表 2.1.单循环链表 2.2.双循环链表 三、栈 3.1.顺序栈 1.创建栈 2.判断栈是否满 3.判断栈是否为空 4.进栈 5.出栈…

SAP 生产订单工序删除状态撤回简介

SAP 生产订单工序删除状态撤回简介 一、业务场景二、处理办法三、系统控制一、业务场景 生产订单正常没有按工序分配物料,系统会自动会把物料分配到第一道工序中 生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配…

【微服务】springboot 自定义注解+反射+aop实现动态修改请求参数

目录 一、前言 二、动态修改接口请求参数的场景 2.1 动态修改请求参场景汇总 2.1.1 数据格式标准化 2.1.2 安全需要 2.1.3 参数校验与默认值设定 2.1.4 数据隐私保护 2.1.5 适配不同客户端 2.1.6 统计与监控 2.1.7 高级功能特性 三、springboot 使用过滤器和拦截器动…

【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十五)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

Oracle rac模式下undo表空间爆满的解决

文章目录 前言一、确认对应实例的undo表空间二、确认对应实例undo的文件位置三、确认回滚段使用情况四、检查undo segment状态五、创建新的undo表空间并进行切换六、等待原undo表空间segment状态变更为offline七、删除原undo表空间以及数据文件 前言 一、确认对应实例的undo表空…

【云原生】Helm来管理Kubernetes集群的详细使用方法与综合应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Seata环境搭建

1、Seata下载&#xff1a; 1.下载地址 2.下载的版本 2、Seata参数配置参考&#xff1a; 各种seata参数官网参考 3、Seata安装部署&#xff1a; 3.1.Seata新手部署指南: 3.2.在mysql8.0数据库里面建库建表 a.建数据库&#xff1a; create database seata; use seata;b.建…

PVN3D(一)代码框架

在windows上配置pvn3d的环境一直配不成功&#xff0c;主要卡在了与C联合编译上&#xff0c;不知道如何处理了。索性先看看代码&#xff0c;竟然发现与论文中的代码对应上了。希望这一段时间把环境配置好。 1.论文中的网络结构 1.RGB图像特征&#xff0c;通过CNN提取特征。深度…

【排序算法】快速排序升级版--三路快排详解 + 实现(c语言)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;算法 目录​​​​​​​ 前言 一、三路快排的整体思路 二、三路快排的具体实现 1.测试数据、交换函数和三数取中法 2.三路快排函数 三、程序全部代码 总…

无线麦克风推荐哪些品牌,无线麦克风哪个品牌好,好的麦克风推荐

在声音创作与直播的领域里&#xff0c;无线领夹麦克风作为捕捉清晰声音的第一道防线&#xff0c;其重要性不言而喻。传统的有线麦克风及部分无线产品&#xff0c;难以在移动场景下提供稳定、清晰的录音效果&#xff1b;劣质无线领夹麦克风往往音质不稳定&#xff0c;甚至可能在…