百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis 持久化基础知识汇总(redis的持久化机制是什么)

mhr18 2024-10-23 11:35 21 浏览 0 评论

Redis 持久化

Redis 是内存数据库,为了防止进程退出后数据丢失,Redis 提供的两种数据持久化方式RDB 方式和 AOF 方式,本文整理这两种方式的基本内容,最近阅读书籍是付磊、张益军编著的《Redis 开发和运维》,AOF(Append only file ) 流程图也来源于该书。

RDB 方式

1、 概念:将当前进程数据生成快照保存到硬盘的过程。

2、触发方式:

save 命令:阻塞当前 Redis 服务器,直到 RDB 过程完成为止,该方法已经废弃。
bgsave 命令:Redis 进程执行 fork 操作创建子进程,由子进程完成。

手动触发会导致阻塞,所以对内存占据较大的实例会造成影响。
fork方式在fork一瞬间会造成阻塞。

3、自动触发的几种场景:

  • 使用save相关配置
  • 从节点全量复制操作会触发主节点向从节点发送RDB文件。
  • debug reload命令会自动触发
  • AOF 未开启,但是Redis执行shutdown操作时会触发

4、执行流程:


关注这里的 fork 操作之后,由于子进程只能共享主进程 fork 时的内存信息,所以生成的快照不包含(3)以后主进程此后响应的其他命令,所以不具备实时性。

5、优缺点:

优点:
1)紧凑的二进制文件,代表 Redis 在某个时间点上的数据快照,适合拷贝、全量复制等场景;
2)Redis 加载 RDB 恢复数据远远快于 AOF 方式;
3)默认采用 LZF 算法对生成的 RDB 文件进行压缩处理,压缩后的文件远远小于内存大小,默认开启了压缩。

缺点:
1)RDB 方式没法做到实时持久化、秒级持久化,因为它是全量快照、重量级操作;
2)RDB 使用的二进制格式,存在版本迁移问题,可能会出现新版本不兼容老版本;
3)由于子进程只能共享 fork 操作时的内存数据,bgsave 方式下主进程后续的响应命令无法实时体现在快照中。

AOF 方式

1、概念:以独立日志的方式记录每次写命令,重启时重新执行AOF中的命令达到数据恢复的目的。

2、特点:

  • 直接采用文本协议格式,有较好的兼容性和可读性,方便修改和处理;
  • 命令先追加到aof_buf中,再根据硬盘当前的负载执行同步硬盘的策略。

3、AOF 文件同步策略,控制参数为appendfsync:

  • always:写入缓存后调用系统的fsync操作;
  • ererysec:写入缓存后调用系统的write操作,wrtie完成后线程返回,由专门线程每秒调用一次fsync, 默认的同步策略;
  • no:写入aof_buf后调用系统write操作,不对AOF文件做fsync同步,由操作系统负责,通常同步周期为最长30秒。

知识点:系统的 write 和 fsync 操作,前者立即返回,会触发延迟写;后者针对单个文件强制硬盘同步,fsync 将阻塞直到写硬盘完成后返回,保证了数据的持久化。

4、AOF 重写机制:

目的:解决 AOF 文件逐渐臃肿而进行的。
概念:是将 Redis 进程内的数据转换为写命令同步到新的 AOF 文件。(相当于一次快照后的全新文件)此时的文件相比一致追加的旧文件来说容量相对小很多。

触发机制:
手动触发:bgrewriteaof
自动触发:auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定。

执行流程:

fork 之后子进程保证 AOF 文件实时性的巧妙设计流程为:
3.1 和 3.2 的 AOF 重写缓存部分,保证 fork 后主进程的写操作被同步到缓冲区,写入最终的 AOF 文件。这点与 RDB 的 bgsave 的处理不同,得到的收益也不同。

启示录

持久化中学到的几种巧妙设计:
1、RDB 的压缩处理。
2、为防止 AOF 文件过大而提出的 AOF 重写机制。
3、AOF 重写 流程中在 fork 操作之后的写命令缓存两份的处理过程,以防止数据丢失。
4、AOF 为平衡性能和安全性而使用的文件同步策略。

相关推荐

Redis合集-使用benchmark性能测试

采用开源Redis的redis-benchmark工具进行压测,它是Redis官方的性能测试工具,可以有效地测试Redis服务的性能。本次测试使用Redis官方最新的代码进行编译,详情请参见Redis...

Java简历总被已读不回?面试挂到怀疑人生?这几点你可能真没做好

最近看了几十份简历,发现大部分人不是技术差,而是不会“卖自己”——一、简历死穴:你写的不是经验,是岗位说明书!反面教材:ד使用SpringBoot开发项目”ד负责用户模块功能实现”救命写法:...

redission YYDS(redission官网)

每天分享一个架构知识Redission是一个基于Redis的分布式Java锁框架,它提供了各种锁实现,包括可重入锁、公平锁、读写锁等。使用Redission可以方便地实现分布式锁。red...

从数据库行锁到分布式事务:电商库存防超卖的九重劫难与破局之道

2023年6月18日我们维护的电商平台在零点刚过3秒就遭遇了严重事故。监控大屏显示某爆款手机SKU_IPHONE13_PRO_MAX在库存仅剩500台时,订单系统却产生了1200笔有效订单。事故复盘发...

SpringBoot系列——实战11:接口幂等性的形而上思...

欢迎关注、点赞、收藏。幂等性不仅是一种技术需求,更是数字文明对确定性追求的体现。在充满不确定性的网络世界中,它为我们建立起可依赖的存在秩序,这或许正是技术哲学最深刻的价值所在。幂等性的本质困境在支付系...

如何优化系统架构设计缓解流量压力提升并发性能?Java实战分享

如何优化系统架构设计缓解流量压力提升并发性能?Java实战分享在高流量场景下。首先,我需要回忆一下常见的优化策略,比如负载均衡、缓存、数据库优化、微服务拆分这些。不过,可能还需要考虑用户的具体情况,比...

Java面试题: 项目开发中的有哪些成长?该如何回答

在Java面试中,当被问到“项目中的成长点”时,面试官不仅想了解你的技术能力,更希望看到你的问题解决能力、学习迭代意识以及对项目的深度思考。以下是回答的策略和示例,帮助你清晰、有说服力地展示成长点:一...

互联网大厂后端必看!Spring Boot 如何实现高并发抢券逻辑?

你有没有遇到过这样的情况?在电商大促时,系统上线了抢券活动,结果活动刚一开始,服务器就不堪重负,出现超卖、系统崩溃等问题。又或者用户疯狂点击抢券按钮,最后却被告知无券可抢,体验极差。作为互联网大厂的后...

每日一题 |10W QPS高并发限流方案设计(含真实代码)

面试场景还原面试官:“如果系统要承载10WQPS的高并发流量,你会如何设计限流方案?”你:“(稳住,我要从限流算法到分布式架构全盘分析)…”一、为什么需要限流?核心矛盾:系统资源(CPU/内存/数据...

Java面试题:服务雪崩如何解决?90%人栽了

服务雪崩是指微服务架构中,由于某个服务出现故障,导致故障在服务之间不断传递和扩散,最终造成整个系统崩溃的现象。以下是一些解决服务雪崩问题的常见方法:限流限制请求速率:通过限流算法(如令牌桶算法、漏桶算...

面试题官:高并发经验有吗,并发量多少,如何回复?

一、有实际高并发经验(建议结构)直接量化"在XX项目中,系统日活用户约XX万,核心接口峰值QPS达到XX,TPS处理能力为XX/秒。通过压力测试验证过XX并发线程下的稳定性。"技术方案...

瞬时流量高并发“保命指南”:这样做系统稳如泰山,老板跪求加薪

“系统崩了,用户骂了,年终奖飞了!”——这是多少程序员在瞬时大流量下的真实噩梦?双11秒杀、春运抢票、直播带货……每秒百万请求的冲击,你的代码扛得住吗?2025年了,为什么你的系统一遇高并发就“躺平”...

其实很多Java工程师不是能力不够,是没找到展示自己的正确姿势。

其实很多Java工程师不是能力不够,是没找到展示自己的正确姿势。比如上周有个小伙伴找我,五年经验但简历全是'参与系统设计''优化接口性能'这种空话。我就问他:你做的秒杀...

PHP技能评测(php等级考试)

公司出了一些自我评测的PHP题目,现将题目和答案记录于此,以方便记忆。1.魔术函数有哪些,分别在什么时候调用?__construct(),类的构造函数__destruct(),类的析构函数__cal...

你的简历在HR眼里是青铜还是王者?

你的简历在HR眼里是青铜还是王者?兄弟,简历投了100份没反应?面试总在第三轮被刷?别急着怀疑人生,你可能只是踩了这些"隐形求职雷"。帮3630+程序员改简历+面试指导和处理空窗期时间...

取消回复欢迎 发表评论: