Redis 实现持久化

news2025/1/19 14:19:01

Redis ⽀持 RDB ( 定期备份 ) 和 AOF ( 实时备份 ) 和 混合持久化 (结合RDB 和 AOF 的特点) 持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。

RDB(Redis DataBase)

RDB 是一种快照备份机制,在指定的时间间隔内将内存中的数据集快照写入磁盘。

1. 手动触发

save:执行 save 的时候,redis 就会全力以赴的进行 " 快照生成 " 操作,此时就会阻塞 redis 的其他客户端的命令,直到进行 RDB 为止导致类似于 keys * 的后果。一般不建议使用 save。

bgsave:Redis 进程执⾏ fork 操作创建⼦进程,RDB 持久化过程由⼦进程负责,完成后⾃动 结束。阻塞只发⽣在 fork 阶段,⼀般时间很短。不会影响 Redis 服务器处理其他客户端的请求和命令。

2. 自动触发

Redis 运行自动触发 RDB 持久化机制。

1. 使用 save 配置。如 "save m n" 表示 m 秒内数据集至少发生了 n 次修改,自动 RDB 持久化。

2. 执行 shutdown 命令关闭 Redis 时,执行 RDB 持久化

3. 从节点进行全量复制操作时,主节点自动进行 RDB 持久化,随后将 RDB ⽂件内容发送给从结点。

特点

(1)数据恢复:RDB 存储的是 Redis 在某个时间点的数据,恢复时只需从磁盘中读取最近保存的快照文件即可,因此恢复速度非常快。

(2)数据完整性:由于是按一定时间间隔进行备份,数据可能会存在一部分的丢失,对数据完整性和一致性要求不高时更适合使用。

(3)磁盘空间:RDB文件是二进制数据压缩文件,数据落地速度快,体积小,节省磁盘空间。

(4)性能影响:在Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑。虽然Redis 在 fork 时使用了写时拷贝技术,但如果数据庞大时还是比较消耗性能。

使用场景:更适合于对数据完整性要求不高、需要快速恢复且数据量较大的场景,如数据备份存储。


AOF(Append Only File)

AOF 是以日志的形式来记录每个写操作(增量保存),将 Redis 执行过的所有写指令记录下来(读操作不记录)。每次 Redis 重启的时候会读取 AOF 文件中的内容用来恢复数据(开启AOF 时 RDB 就不生效了,启动的时候不会再读取 RDB 了)

AOF 重写机制:

在进行 AOF 进行重写数据时,会有大量冗余操作(比如你set key 又 del key 就相当于啥都没干),redis 中就存在重写机制对 AOF 文件进行整理(为内存中的如今状态)。

特点

数据恢复:Redis 重启时会根据 AOF 文件的内容将写指令从前到后执行一次以完成数据的恢复工作,备份机制更稳健,丢失数据概率更低。

可读性:AOF 文件是可读的日志文本,通过操作AOF文件可以处理误操作。 磁盘空间:AOF 相比RDB 会占用更多的磁盘空间。

恢复速度:由于 AOF 记录了所有的写操作,恢复备份速度要慢于 RDB。

性能影响:如果每次读写都同步到 AOF 文件,会有一定的性能压力。

使用场景:更适合于对数据完整性要求高、需要记录每次写操作的场景,如数据恢复和误操作处理。


扩展问题

Redis 是单线程,怎么做到实现bgsave这个多线程的场景呢???

答:redis 在此处使用的是 "多进程" 的方式来完成的并发编程。

1. 执行 bgsave 命令,Redis 父进程判断当前进是否存在其他正在执⾏的子进程,如 RDB / AOF 子进程,如果存在 bgsave 命令直接返回。(也就是看看是不是只有一个在执行 bgsave)

2. 没有子进程的话,就通过 fork 创建子进程(就是把父进程复制一份,互不干扰)。

3. 父进程完成 fork 后不再阻塞,可以继续响应其他命令。

4. 子进程创建 RDB 文件,根据⽗进程内存生成临时快照文件,完成后对原有文件进行原子替换。

5. 进程发送信号给父进程表示完成,父进程更新统计信息

Redis 快重要原因是操作内存,但是引入 AOF 后,既要写内存还要写硬盘,为啥 Redis 还是很" 快 " ???

AOF 不会影响到 redis 处理请求的速度:

1. AOF 机制不是直接让工作线程把数据写到硬盘,而是先写到内存中的缓冲区,进行积累,再统一写入硬盘。大大降低了写硬盘的次数。(写到硬盘中的数据大小对性能影响不大,写入的次数是重要因素)

2. 硬盘上读写数据,顺序读写相对比较快(还是比读内存慢),随机访问比较慢。AOF 就是把新的操作写入到原有文件的末尾属于顺序写入。

上面说写入到缓冲区,那么缓冲区刷新策略是什么呢 ?

always:写一条数据到缓冲区就立马刷新。

everysec:每秒刷新一次。

no:操作系统自己进行刷新。

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

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

相关文章

Python深度学习基于Tensorflow(16)基于Tensorflow的对话实例

文章目录 基础数据清洗数据生成词汇表定义分词器并制作数据集构建Transformer模型并训练模型推理 Tensorflow 的核心就是注意力机制,在之前详细的介绍过,具体可以看这个:Python深度学习基于Tensorflow(9)注意力机制_te…

【传知代码】Noise2Noise图像去噪(论文复现)

前言:在数字时代,图像已成为我们记录生活、传达信息、探索世界的重要媒介。然而,随着摄影技术的飞速发展,图像噪声——这一影响图像质量的顽疾,始终困扰着我们。Noise2Noise图像去噪技术为我们提供了一种全新的解决方案…

【设计模式】结构型-装饰器模式

在代码的海洋深处迷离,藏匿着一片神奇之地。那里有细腻的线条交错,是装饰器的奇妙艺术。 文章目录 一、登录的困境二、装饰器模式三、装饰器模式的核心组成部分四、运用装饰器模式五、装饰器模式的应用场景六、小结推荐阅读 一、登录的困境 假设我们有…

【经验分享】搭建跨境电商那个独立站必备的功能模块以及实现

搭建跨境电商独立站时,需要确保网站具备一系列关键的功能板块,以提供用户友好的购物体验并确保业务的顺利进行。以下是这些功能板块的详细归纳: 注册登录与身份验证: 用户注册与登录:允许用户创建账户,通过…

CST纳米光学 --- LSPR局部等离子激元共振,消光截面ECS,法诺共振

这期我们用自带的Drude散射粒子,计算消光截面。 查看模型,内核是Silica二氧化硅,正常的介质材料,半径是38纳米: 外围是Drude模型的金属材料包裹,半径48纳米,该材料的参数可由宏Materials->Cr…

洁净室气流流型分类及气流流型可视化验证

洁净室气流 流型的分类 洁净室是空气悬浮粒子浓度受控的房间,其建造和使用方式可最大限度减少房间进入的、产生的和滞留的粒子。房间内的温度、湿度、压力等其他相关参数均按要求受控(ISO14644-6)。 #深度好文计划# 一.洁净室的四大技术要素…

招募来袭 | 与热爱技术的谷歌开发者一起创造精彩

写在前面 技术的进步在不断推动着世界发展。从 Android、Flutter 等产品的稳步更新迭代,到秉承着负责任的态度对 AI 进行探索,我们通过每一次的技术跃进,帮助大家打开新的视野,激发更多的灵感,将我们的工具和平台打造成…

线控转向 0 -- 线控转向介绍和专栏规划

一、线控转向介绍 高阶自动驾驶核心部件:英创汇智线控转向解决方案 _北京英创汇智科技有限公司 (trinova-tech.com) 线控转向的系统组成详细介绍大家可以看上面这个链接;我这里也只从里面截取一些图片,简单说明。 1、结构组成 线控转向分为…

【前端基础】CSS介绍|CSS选择器|常用CSS

目录 一、CSS介绍 1.1 什么是CSS 1.2 基本语法规范 1.3 引⼊⽅式 1.4 规范 💡二、CSS选择器 1. 标签选择器 2. class选择器 3. id选择器 4. 复合选择器 5. 通配符选择器 三、常用CSS 3.1 color 3.2 font-size 3.3 border 3.4 width/height 3.5 padd…

C51单片机 串口打印printf重定向

uart.c文件 #include "uart.h"void UartInit(void) //4800bps11.0592MHz {PCON | 0x80; //使能波特率倍速位SMODSCON 0x50; //8位数据,可变波特率。使能接收TMOD & 0x0F; //清除定时器1模式位TMOD | 0x20; //设定定时器1为8位自动重装方式TL1 0xF4; //设…

BUG解决: Zotero 文献GBT7714无法正常调用

1. 下载csl文件 网上有推荐直接下载现成版本的,比如参考资料【1】的蓝奏云文件,但是还是无法实现功能(空文档中可以用了)。 2. Github版本 也有说网盘版本和那个 Juris-M 的 CSL bug 太多的。 总结 后面发现,只需…

【生产排查】解决 Kettle 没有运行日志的问题

文章目录 背景排查解决第 1 步:修改 kettle-service.conf,添加日志配置第 2 步:使用最新配置文件重启 kettle第 3 步:验证日志配置是否生效背景 🚀 项目使用 Kettle 作为 ETL 工具,从外部系统中抽取数据、转换数据、并最终加载到本项目的数据库中。 😂 存在的问题:据…

JVM学习-详解类加载器(二)

双亲委派机制 双亲委派优势 避免类的重复加载,确保一个类的全局唯一性 Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层次关系可以避免类的重复加载,当父类已经加载了该类,就没有必要子ClassLoader再加载…

ai辅助教育孩子

孩子经常躺在床上看手机是一个需要关注的问题,因为这不仅可能影响他们的视力健康,还可能影响睡眠质量和身体健康。以下是一些建议,帮助应对这一问题: 设定明确的规定: 与孩子一起制定使用手机的规则,如每天…

nginx c++模块编译

不论是c还是c,nginx的第三方模块编写没什么太区别,但是提供给nginx调用的,必须是纯c的接口。 先说下为什么不能使用c编译nginx,nginx是纯c写的,而且c是兼容c的,但是用c(g)编译nginx的框架,就会出…

呆滞物料规范管理了,问题就好办了

对于制造企业来说,库存是生存和发展的重要保障,过高的库存会占用企业大量的资金和管理成本,影响企业的正常生产,然而多数中小制造企业还在用人工干预管理,如何控制呆滞物料成为仓储管理的一大难题。 什么是呆滞料&…

【JAVASE】日期与时间类(下)

三:LocalDateTime 相当于LocalDate类,在LocalDateTime类的对象中还可以封装时、分、秒和纳秒(1纳秒是1秒的十亿分之一)等时间类型。 例如,创建LocalDateTime对象 , LocalDateTime date LocalDateTi…

【Docker】上海交通大学开源镜像站服务变更:Docker 用户需迅速行动

近日,上海交通大学开源镜像站宣布了一个重大变更,对国内Docker用户来说,这一消息无疑具有紧迫性。 镜像站服务的变更 上海交通大学开源镜像站一直是国内Docker用户的重要资源,它提供了快速下载DockerHub仓库镜像的服务。然而&a…

LiDAR360MLS 7.2.0 雷达点云数据处理软件功能介绍

新增模块和功能: 支持手持、背包数据的解算 SLAM解算成功率提升 SLAM解算效率提升 采集端与后处理端保持一致 赋色优化 新增平面图模块 新增平面图全自动矢量化功能 新增平面图矢量一键导出DXF功能 新增平面图正射影像一键导出功能 支持交叉、垂直绘制 支…