阿里新晋P7架构师分享Redis持久化

Redis 常见问题之-AOF阻塞 Redis下一小节:7-1Redis复制原理与优化 Redis 常见问题之-AOF阻塞 1、AOF追加阻塞 如果AOF文件fsync同步时间大于2s,Redis主进程就会阻塞; 如果AOF文件fsync同步时间小于2s,Redis主进程就会返回; 其实这样做的目的是为了保证文件安全性的一种策略。 AOF追加阻塞会产生两位问题: (1)fsync大于2s时候,会阻塞redi... 阅读详情

按常理来说,应该介绍下什么是Redis,按照从入门到进阶的思路嘛,但这里就免了,我假设读者都了解Redis,起码知道它是干什么用的。

那直接进入正题,从一个面试题入手“Redis重启后数据会丢失吗?”

很傻的问题,不过作为面试官的我昨天就问过某个面试者,答:“不会,数据还在”,那做我就会继续问了“它数据还在?是什么机制能让数据不会丢失呢?它不是内存数据库吗?”

答:“呃,好像是做了持久化,使用binlog吧”

好了,这问题已经谈不下去了,而且这个问题答不上来的不只一两个,怎么办? 写个文章聊聊呗

其实Redis保证重启后数据不丢失的原因确实是做了持久化,但持久化是使用RDB,和AOF两种策略来实现的,那接下来的分析我也分这两部分进行。

1.1. RDB到底是什么

RDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb文件。Redis 重启会通过加载dump.rdb文件恢复数据。

很好理解,也就是我什么都不做,RDB就是可以用的了,在配置文件里面又怎么体现的呢?

你找到配置文件,在配置redis.conf文件里面找下如下的配置

save 60 1000

这个配置指的是,每隔60s,如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redis内存中完整的数据快照,这个操作也被称之为snapshotting,快照

当然你也可以手动调用save或者bgsave命令,同步或异步执行rdb快照生成,同时save可以设置多个,就是多个snapshotting检查点,每到一个检查点,就会去check一下,是否有指定的key数量发生了变更,如果有,就生成一个新的dump.rdb文件

1.1.1. RDB工作流程

上面画了个简单的图,描绘的是RDB持久化机制的工作流程,具体来看可以有如下几个步骤

(1)redis根据配置自己尝试去生成rdb快照文件

(2)fork一个子进程出来

(3)子进程尝试将数据dump到临时的rdb快照文件中

(4)完成rdb快照文件的生成之后就替换之前的旧的快照文件dump.rdb,每次生成一个新的快照,都会覆盖之前的老快照

这是RDB的整个流程,根据图的描述假设早上6点整触发了一次RDB,当6点过1分的时候,如果数据量到2000,会触发一次RDB,生成新的快照文件。一切都这么好。

,假设有这种情况,如果在6的时候触发了一次RDB,在6点过1分的时候,数据还只有1900,按条件是不会触发RDB的,那么问题来了,这时候突然Redis服务器down机,会出现什么问题呢?

你猜对了,900条数据会整个丢失,那怎么解决呢?你可能会想这个不难,既然save 60 1000不会好,数据会丢失,而且save检查点是可以设置多个的,我save 1 1 不就好了吗,一秒内如果有1条数据变化了,我触发一次RDB,这样数据就不会丢了。

想法是好的,但现实是骨感的,这RDB是快照文件,里面存放的是全量的数据库数据,你一秒就执行一次RDB,你觉得性能吃得消嘛? 这肯定是个特别糟糕的解决方式,怎么办呢?你需要AOF这种持久化策略,但别着急,先来总结以下RDB的优缺点

1.1.2. RDB优缺点总结

RDB持久化机制的优点

1 适合大规模的数据恢复,尤其擅长冷备

2 如果业务对数据完整性和一致性要求不高,RDB是很好的选择

RDB持久化机制的缺点

1 数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。

2 备份时占用内存,因为Redis 在备份时会独立创建一个子进程,将数据写入到一个临时文件(此时内存中的数据是原来的两倍哦),最后再将临时文件替换之前的备份文件。

所以Redis 的持久化和数据的恢复要选择在夜深人静的时候执行是比较合理的。

1.2. AOF又是什么鬼

前面已经知道RDB是什么东西了,RDB在保证性能的前提下可能会数据丢失,那接下来就应该聊聊AOF了,AOF是什么呢?

AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

也好理解,它记录的是日志文件,显然速度应该快很多,但是默认却是关闭的,怎么开启呢?

找到配置文件后,你需要修改的第一个配置为

appendonly yes

以打开AOF持久化机制,在生产环境里面,一般来说AOF都是要打开的,除非你说随便丢个几分钟的数据也无所谓

打开AOF持久化机制之后,redis每次接收到一条写命令,就会写入日志文件中,当然是先写入os cache的,然后每隔一定时间再fsync一下磁盘文件

这里有一个问题了,如果AOF和RDB都开启了,Redis重启了以谁为准呢?

答案是:redis重启的时候,也是优先通过AOF进行数据恢复的,因为aof数据比较完整

除开appendonly的这个配置项,关于AOF还有一个非常有意思的配置

appendfsync everysec

这个appendfsync 默认值是everysec,除开这个以外,总共有3个取值的可能

always: 每次写入一条数据,立即将这个数据对应的写日志fsync到磁盘上去,性能非常非常差,吞吐量很低; 确保说redis里的数据一条都不丢,那就只能这样了

everysec: 每秒将os cache中的数据fsync到磁盘,这个最常用的,生产环境一般都这么配置,性能很高,QPS还是可以上万的

no: 仅仅redis负责将数据写入os cache就撒手不管了,然后后面os自己会时不时有自己的策略将数据刷入磁盘,不可控了

可见默认值就是最好的选项了。

1.2.1. AOF工作流程

下面有个简图,描绘的是AOF的工作流程

(1)redis fork一个子进程

(2)子进程基于当前内存中的数据,构建日志,开始往一个新的临时的AOF文件中写入日志

(3)redis主进程,接收到client新的写操作之后,在内存中写入日志,同时新的日志也继续写入旧的AOF文件

(4)子进程写完新的日志文件之后,redis主进程将内存中的新日志再次追加到新的AOF文件中

(5)用新的日志文件替换掉旧的日志文件

可见AOF很好解决了RDB数据丢失的问题,下面再来看下AOF的文件的优缺点

1.2.2. AOF优缺点总结

AOF持久化机制的优点

数据的完整性和一致性更高

AOF持久化机制的缺点

因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢

1.3. 总结

最后我们再来总结以下,关于RDB,AOF两种持久化策略的特点

Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。

RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。

Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。

AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。

Redis 针对 AOF文件大的问题,提供重写的瘦身机制。

若只打算用Redis 做缓存,可以关闭持久化。

若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。

转发+转发+转发+私信关键词 【学习】 即可免费领取JAVA资料+面试文档!!!!!

Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用 补充一个知识 缓存:数据可以丢,保证速度。 数据库:数据是绝对不能丢的,保证速度+持久性,内存中的数据是掉电易失的。 存储层: 快照/副本 日志文件 $$优先级高于管道 fork() fork是系统调用,copy on write是内核机制。 写时复制 在fork子进程的时候,只拷贝指针,并不发生内存的复制。 只有当其中的某一个进程试图对该区域进行写操作时,内核就会在物理存储器中为子进程开辟一个新的物理页面,将需要写的区域将父进程的内容复制一份给子进程,然后对新的物理页面进行写操作。 这时就是实现了 阅读详情

相关推荐

阿里P8架构师亲授一心多用,带你左手MongoDB,右手Redis,纯干货

推荐观看:阿里P8架构师谈:工作1-5年的Java工程师,怎样提高核心竞争力 阿里架构师直言:“没有实战都是纸上谈兵”!Redis实战PDF分享 奋发图强半年多,终于四面阿里如愿拿到心仪offer定级P7 Mongodb 分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替...

文章中资料均可获取,有需要请添加yunduoa2019即可 499

部署Redis4.x单机版及配置RDB和AOF持久化

一、环境及软件 OS   soft version CentOS 7.5 redis-4.0.12(目前是4.x最新) 二、下载及编译Redis [root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.12.tar.gz [root@localhost ~]#...

weixin_34388207的博客 214

前阿里P7架构师,分享多年工作心得and面试经验,祝你圆大厂梦

我是2018年9月初开始接触工作机会和视频面试,9月10日也就是马云老师在教师节宣布即将卸任的那天,我接到了电话邀请我去杭州终面,当时我乐的屁颠屁颠的,觉得啊这都是缘分啊。面试很顺利,给了P7+,也有股票,后面的体检和背景调查都很顺利,为了体验双11,我国庆后回来就辞职,然后无缝衔接的搬家去了杭州,住进公司统一安排的维也纳酒店,火速入职加入了双11战役,看着西溪园区的灯火通明,觉得自己激情澎湃。 双11熬了几天夜,开始复盘,开始调整,开始每周六给老板写7K字+的部门周报。开始拥抱变化。面试...

文章中资料均可获取,有需要请添加yunduoa2019即可 694

Redis的持久化详解

Redis的持久化,Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。Redis的数据也支持写到硬盘中,这个过程就叫做持久化。RDB(Redis DataBase):简而言之,就是在指定的时间间隔内,定时的将 redis 存储的数据生成Snapshot快照并存储到磁盘等介质上;AOF(Append Of File):将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

怪咖@的博客 3万+

利用Nginx反向代理实现GitLab自定义域名的高效配置

本文详细介绍了如何利用Nginx反向代理实现GitLab自定义域名的高效配置。通过统一域名管理、性能优化和安全加固,提升GitLab的访问效率和安全性。文章包含前期准备、GitLab基础配置、Nginx反向代理设置及常见问题排查,帮助开发者快速完成部署。

weixin_28834169的博客 165

雷达气象学(8)——反射率因子图实战(强对流预警篇)

本文聚焦雷达反射率因子图在强对流预警中的实战应用,深入解析了柱状回波、有界弱回波区(BWER)、三体散射(TBSS)等关键回波结构特征,这些是识别超级单体风暴和大冰雹的核心“身份证”。文章强调从静态识别转向动态追踪与多源数据综合研判的思维转变,并提供了系统的实战分析流程与常见误区避坑指南,旨在提升对强对流天气的短临预警能力。

weixin_29213827的博客 487

redis因AOF追加磁盘阻塞发生故障转移

追加AOF时磁盘繁忙redis 错误日志截图下图为AOF工作流程图AOF工作流程图1.所有的写入命令会追加aof_buf(缓冲区中)。2.AOF缓冲区根据对应的策略向硬盘做同步操作。3.随着AOF文件越来越大,需要定期对AOF文件进行重写,达成压缩的目的(对一个key跟新100次会有100条记录,重写后只留最后一条).4.当redis服务器重启时,可以加载AOF文件进行数据...

weixin_33974433的博客 532

手把手教你为ArduPilot添加自定义飞行模式:以自动巡检航线为例

本文详细介绍了如何为开源飞控ArduPilot添加自定义飞行模式,并以自动巡检航线为例,提供了从状态机设计、代码实现到地面站集成的完整开发指南。通过七步法手把手教学,帮助开发者深入理解飞控核心逻辑,实现无人机自主执行复杂巡检任务,满足行业应用定制需求。

weixin_29306875的博客 138

【Java进阶营】阿里新晋P7架构师分享Redis持久化

🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

2401_84620100的博客 1151

不用公网IP!用Ollama+Chatbox搭建家庭AI助手(内网穿透方案对比)

本文详细介绍了如何利用Ollama和Chatbox在家庭局域网中搭建本地AI助手,无需公网IP即可实现内网穿透。通过对比不同穿透方案(如Tailscale、FRP等),提供最优配置建议,帮助用户低成本部署隐私安全的家庭AI系统,适用于智能家居、儿童教育等多种场景。

weixin_26765287的博客 467

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态

执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。

机器人控制与仿真应用 3355

入职阿里巴巴,成为年薪百万阿里P7高级架构师需要必备哪些技术栈

备注:(架构视频包含:Spring boot、Spring cloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB、ZeroMQ、Git、Nosql、Jvm、Mecached、Netty、Nio、Mina、性能调优、高并发、tomcat 负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr 集群与应用、分布式实战、主从复制、高可用集群等高端视频。redis消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU。

m0_63437643的博客 1199

【笔记篇】Davinci Configurator OS模块(下)

AUTOSAR OS的配置项和Vevtor MICROSAR OS的特性

weixin_47571898的博客 1158

阿里P7架构师开源分享2023最新897道java面试题答案

7) 什么是原子操作,Java 中的原子操作是什么?6.内存调优 7.垃圾回收策略调优 8.共享 session 处理 9.专业点的分析工具有 10.关于 Tomcat 的 session 数目 11.监视 Tomcat 的内存使用情况 12.打印类的加载情况及对象的回收情况 13.Tomcat 一个请求的完整过程 14.Tomcat 工作模式?activeMQ 是一种开源的,实现了 JMS1.1 规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信;

代码界的扛把子 524

华为OD机试 - 学校的位置 - 数学问题(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 455

硬件描述语言Verilog学习(一)

主要学习综合和仿真、模块结构和信号类型Verilog 是用代码的形式描述硬件的功能,最终在硬件电路上实现该功能。在 Verilog 描述出硬件功能后需要使用综合器对 Verilog 代码进行解释并将代码转化成实际的电路来表示,最终产生实际的电路,也被称为网表。这种将 Verilog 代码转成网表的工具就是综合器。 上图左上角是一段 Verilog 代码,该代码实现了一个加法器的功能。在经过综合器解释后该代码被转化成一个加法器电路。QUARTUS、ISE 和 VIVADO 等 FPGA 开发工具都是综合器,

安静到无声 1500

阿里大佬倾情力荐:Java全线成长宝典,从P5到P8一应俱全

深入Tomcat底层:理解Tomcat启动流程+Tomcat配置详解+HTTP请求解析与处理流程+Tomcat核心组件认识+Tomcat类加载机制及源码解析+Tomcat中异步Servlet实现源码分析+Tomcat BIO实现源码解读+Tomcat NIO实现源码解读+Tomcat集群与会话复制方案+Tomcat性能调优+JVM参数优化+Tomcat集群+Tomcat安全。因此,不断更新自己的知识库,确保自己一定能保持在这个行业的头部,要具有忧患意识是非常重要的。

代码界的扛把子 968

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

三面面阿里只为P7,过关斩将成功通过2面,结果3面找来个架构师,只为吊打我

前言 人人都有大厂梦,对于程序员来说,BAT为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让人瞻仰。 同样的,我自己的个人目标也是阿里,但之前一直在一家小公司,一呆就是好几年,现在通过不断学习和实践,提升了自己很多,也有了信心来阿里挑战。下面,就是我这次面试阿里P7的一些经历和心得。 阿里P7岗面试经历 这次阿里的面试经历实在太紧张+刺激+尴尬了,面试前还自信满满,面试后被吊打得怀疑人生。整个流程是四面

文章中资料均可获取,有需要请添加yunduoa2019即可 234

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

论一名优秀的阿里P7架构师的面试真题:RabbitMQ+Kafka+Zookeeper

小编精心收集:为金三银四准备,以下面试题先过一遍,为即将到了的面试做好准备,也过一遍基础知识点。 一、程序员面试系列RabbitMQ专题 1.rabbitmq 的使用场景有哪些? 2.rabbitmq 有哪些重要的角色? 3.rabbitmq 有哪些重要的组件? 4.rabbitmq 中 vhost 的作用是什么? 5.rabbitmq 的消息是怎么发送的? 6...

求关注 604

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

阿里技术官纯手打 Java架构师 进阶宝典,P5-P8完整覆盖

可能有些人会常常有这样的感觉,同是开发有些人比我工资高却什么代码都不写呢?当我听到这个问题的时候第一次映入脑海的就是:工程师的分类。初中级开发工程师一般的初中级开发工程师要求不是特别的高,很多都是要求你会在公司干活,然后能够对公司项目进行代码的编写,和业务的实现。一般要求熟悉 Spring boot,Spring等框架;熟悉dubbo框架、redis等;熟悉Unix/Linux系统,精通数据库Oracle、MySQL 等的开发,精通SQL及存储过程编写能力;就行了。高级Java开发工程师。

m0_69305074的博客 908

“深入内核,拒绝蒙圈”,阿里巴巴一位P7级架构师总结整理的这份《Java架构成长笔记》彻底火了。

导言 提起阿里,行外人联想到的关键词无非是“交易”、“淘宝”、“支付宝”,但对于程序员来说,阿里庞大的技术体系才是最吸引人的。实际上阿里作为国内一线互联网公司的头把交椅,内部的技术体系和发展都是备受关注的,对于程序员来说,能够进到阿里工作,就是对自己的技术水平进行一个提升和学习。 实际上,阿里内部的技术交流氛围是极其强烈的,技术人员也经常会交流自己的学习经验和技术总结。今天要分享的,则是阿里巴巴一位P7级架构师总结整理的这份《Java架构成长笔记》,带我们深入内核,拒绝蒙圈! 下文展示了“Java架

Java技术开发工程师的博客 178
上一篇: 京东二面JVM如何实现线程同步问题时该如何回答?
下一篇: RabbitMQ从零到集群高可用- RabbitMQ简介和六种工作模式详解
Javaesandyou
博客等级 码龄5年 742粉丝 563原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值