【大厂秘籍】 - Redis持久化篇

news2024/11/17 12:19:56

创作不易,你的关注分享就是博主更新的最大动力, 每周持续更新

微信搜索【 企鹅君】关注还能领取学习资料喔,第一时间阅读(比博客早两到三篇)

求关注❤️ 求点赞❤️ 求分享❤️ 对博主真的非常重要

企鹅君原创|GitHub开源项目github.com/JavaDance 欢迎Star和完善

面试开始

激动的心,颤抖的手, 你打开了面试官发过来的远程面试链接

对面是一位身穿格子衬衫的有点中年发福的男子,

看着屏幕上面试官反光的头顶,一寸亮,一寸强!啧啧,你瞬间就感受面试官的实力恐怖如斯~~

但是你也不慌,因为你早已看了多遍《大厂秘籍》,再见面试官都是小场面

面试官从你的项目聊到了Java知识、数据库, 然后就到了面试基本必问的Redis

你心想这不踢到钢板了吗, 公司同事都尊称你是「Redis小王子」

但你还是忍住了心中的沸腾,面色平静、假装着小白等着面试官提问

面试官: 小伙汁, Redis有几种持久化选项,你知道吗

Redis 是一种内存数据库,读写效率快。但是一旦进程退出,Redis 内存数据就会丢失。为了解决这个问题
Redis 提供了4种持久化选项,将数据写入保存到本地磁盘

  1. RDB (Redis DataBase, Redis 数据库)默认的持久化方式

  2. AOF(Append Only File, 仅追加文件)

  3. RDB + AOF(混合持久化)

  4. No persistence(无持久化), 一些简单的业务场景也可以选择关闭持久化RDB

那你讲讲RDB和AOF

RDB

RDB是Redis默认的持久化方式(Redis DataBase, Redis 数据库)。(Redis DataBase, Redis 数据库)按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。
RDB 触发机制分为使用指令手动触发和配置自动触发。
手动触发方式:
● save 命令 ,该指令会阻塞当前 Redis 服务器,执行 save 指令期间,Redis 不能处理其他命令,直到 RDB 过程完成为止。
● bgsave 命令,执行该命令时,Redis 进程执行 fork 操作创建子进程,RDB 持久化过程由子进程负责,完成后自动结束。,此时 Redis 仍然可以相应客户端请求。
配置自动触发方式 :
redis.conf 默认配置

save 900 1 # 表示900 秒内如果至少有 1 个 key 的值变化,则触发RDB
save 300 10 # 表示300 秒内如果至少有 10 个 key 的值变化,则触发RDB
save 60 10000 # 表示60 秒内如果至少有 10000 个 key 的值变化,则触发RDB

AOF

AOF持久化(Append Only File, 仅追加文件),是将Redis执行的每次写命令记录到单独的日志文件中,然后可以在服务器重启时重新执行这些操作,从而恢复数据。

aof具体实现

AOF 持久化功能的实现可以分为5步:

  1. 命令追加(append):所有的写命令会追加到 AOF 缓冲中。
  2. 文件写入(write):将 AOF 缓冲区的数据写入到 AOF 文件中。这一步需要调用write函数(系统调用), 此时并没有同步到磁盘。
  3. 文件同步(fsync):AOF 缓冲区根据对应的持久化方式( fsync 策略)向硬盘做同步操作。这一步需要调用 fsync 函数(系统调用), fsync 针对单个文件操作,对其进行强制硬盘同步,fsync 将阻塞直到写入磁盘完成后返回,保证了数据持久化。
  4. 文件重写(rewrite):随着 AOF 文件越来越大,需要定期对 AOF 文件进行重写,达到压缩的目的。
  5. 重启加载(load):当 Redis 重启时,可以加载 AOF 文件进行数据恢复。
    AOF写入内容
    当 AOF 持久化功能处于打开状态时,Redis 在执行完一个写命令之后,被执行的写命令追加到 Redis 服务端维护的 AOF 缓冲区末尾。
    比如说 SET mykey myvalue 这条命令就以如下格式记录到 AOF 缓冲中。
"*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"

AOF之所以直接采用文本协议格式,是因为所有写入命令都要进行追加操作,直接采用协议格式,避免了二次处理开销。

小伙汁不错嘛,答得这么流畅,看来是没少看《大厂秘籍》,接着就问到:AOF 持久化方式有哪些?

AOF持久化方式有三种,可以在Redis配置文件中设置 appendfsync 选项的值。

  1. append fsync always: Redis 在每个事件循环都要将 AOF 缓冲区中的所有内容写入到 AOF 文件,并且同步 AOF 文件,所以 always 的效率是 appendfsync 选项三个值当中最差的一个,但从安全性来说,也是最安全的。当发生故障停机时,AOF 持久化也只会丢失一个事件循环中所产生的命令数据。
  2. appendfsync everysec:Redis 在每个事件循环都要将 AOF 缓冲区中的所有内容写入到 AOF 文件中,并且每隔一秒就要在子线程中对 AOF 文件进行一次同步。从效率上看,该模式足够快。当发生故障停机时,只会丢失一秒钟的命令数据。
  3. appendfsync no:永远不会fsync,只需将您的数据交给操作系统即可。更快但安全性较低的方法。通常 Linux 会使用此配置每 30 秒刷新一次数据

appendfsync的三个值代表着三种不同的调用 fsync的策略。
建议(和默认)的策略是``appendfsync everysec。它既快速又相对安全。always`策略在实践中非常慢。
AOF 重写

AOF重写有了解过吗

  1. 因为 AOF 持久化是通过保存被执行的写命令来记录 Redis 状态的,所以随着 Redis 长时间运行,AOF 文件中的内容会越来越多,文件的体积也会越来越大,如果不加以控制的话,体积过大的 AOF 文件很可能对 Redis 甚至宿主计算机造成影响。
    为了解决 AOF 文件体积膨胀的问题,Redis 提供了 AOF 文件重写( rewrite) 功能。通过该功能,Redis 可以创建一个新的 AOF 文件来替代现有的 AOF 文件。新旧两个 AOF 文件所保存的 Redis 状态相同,但是新的 AOF 文件不会包含任何浪费空间的荣誉命令,所以新 AOF 文件的体积通常比旧 AOF 文件的体积要小得很多。

aof重写

如上图所示,重写前要记录名为list的键的状态,AOF 文件要保存五条命令,而重写后,则只需要保存一条命令。

那到底应该怎么选择Redis持久化呢

● 如果可以忍受灾难发生时几分钟的数据丢失,建议单独使用 RDB。
● 不建议单独使用 AOF,因为时不时地创建一个 RDB 快照可以进行数据库备份、可以更快的重启恢复数据
● 如果对数据要求安全性比较高的话(不能丢失),建议使用 RDB 和 AOF 混合持久化。


(答得这么好,都有点佩服自己了, 读者朋友们到这赶紧点点赞)

面试结束

小伙汁你针不戳,给你发Offer了,能不能早点来公司上班呀

你心想自己手里还有几个其他大厂的Offer呢,还得问下网友考虑选哪个好呢

你当然没把心里话说出来,假装镇定回复合适的话,争取早点来公司。

好的。面试官 心想这小伙汁有点东西,必须把他招进公司,赶紧联系hr给他工资加满。

你感叹《大厂秘籍》果然有用,再也不用担心没有Offer了

赶紧让你的小伙伴也分享点赞收藏!!!

总结

**技术面试其实并不难,但是也没有什么捷径,(当然博主希望《大厂秘籍》可以帮助读者少走弯路)平时多看多总结。在面试的时候,可以试着通过自己的项目引导面试官向你熟悉的领域提问,比如你的简历项目里写到了使用Redis解决了XX问题,这时候面试官基本都会问你更细节的东西,这样在你提前准备下逻辑清晰, 有理有据的讲出如何解决问题会在面试官心里加不少分, 那一个个Offer还不到手就来!_! **

参考

● Redis persistence - Redis 官方文档:https://redis.io/docs/management/persistence/
● Redis AOF 持久化详解 - 程序员历小冰:http://remcarpediem.net/article/376c55d8/

创作不易,你的关注分享就是博主更新的最大动力, 每周持续更新

微信搜索【 企鹅君 】第一时间阅读(比博客早一到两篇), 关注还能领取资料

求关注❤️ 求点赞❤️ 求分享❤️ 对博主真的非常重要

企鹅君原创|GitHub开源项目github.com/JavaDance 欢迎Star和完善

公众号

本文由mdnice多平台发布

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

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

相关文章

【算法】信使(最短路问题)

题目 战争时期,前线有 n 个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。 指挥部设在第一个哨所。 当指挥部下达一个命令…

<软考高项备考>《论文专题 - 63 质量管理(2) 》

2 过程1-规划质量管理 2.1 问题 4W1H过程做什么识别项目及其可交付成果的质量要求、标准,并书面描述项目将如何证明符合质量要求、标准的过程;作用:为在整个项目期间如何管理和核实质量提供指南和方向为什么做1、识别项目/产品质量要求和标…

debian 11 arm64 aarch64 D2000 平台编译 box86 box64 笔记

参考资料 https://github.com/ptitSeb/box86/blob/master/docs/COMPILE.md 源码地址 GitHub - ptitSeb/box86: Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices deb在线源地址(打不开): Itais box86…

两个阅读英文论文的免费AI工具

大家好啊,我是董董灿。 本文会介绍我平时用到的两个免费的基于GPT的论文阅读平台,很好用,对于有英文阅读困难症的小伙伴(比如我)是真的提效。 1、 英文阅读困难症 在我的工作以及业余学习中,会时不时的需要翻看一些英文论文&…

GitLab任意用户密码重置漏洞(CVE-2023-7028)

GitLab CVE-2023-7028 POC user[email][]validemail.com&user[email][]attackeremail.com 本文链接: https://www.黑客.wang/wen/47.html

JavaScript保留字和预定义的全局变量及函数汇总

保留字也称关键字,每种语言中都有该语言本身规定的一些关键字,这些关键字都是该语言的语法实现基础,JavaScript中规定了一些标识符作为现行版本的关键字或者将来版本中可能会用到的关键字,所以当我们定义标识符时就不能使用这些关…

【Git】本地仓库文件的创建、修改和删除

目录 一、基本信息设置 1、设置用户名2、设置用户名邮箱 二、Git仓库操作介绍 1、创建一个新的文件夹2、在文件内初始化git仓库(创建git仓库)3、向仓库中添加文件 1.创建一个文件2.将文件添加到暂存区3.将暂存区添加到仓库 4、修改仓库文件 1.修改文件2.…

汽车级线性电压稳压器LM317MBSTT3G:新能源汽车的理想之选

LM317MBSTT3G是一款可调三端子正向线性稳压器,能够在 1.2 V 至 37 V 的输出电压范围内提供 500 mA 以上的电流。此线性电压稳压器使用非常简便,仅需两个外部电阻即可设置输出电压。另外,它采用内部电流限制、高温关断和安全区域补偿&#xff…

边缘计算:连接实时数据的力量与未来发展之路

边缘计算是一种分布式计算范式,它旨在将数据处理、存储和应用服务带到数据源的近端,即网络的“边缘”。在边缘计算模型中,算力和存储资源距离末端用户或数据源更近,这减少了数据在网络中传输的距离,从而降低延迟&#…

【Web】token机制

🍎个人博客:个人主页 🏆个人专栏:Web ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 机制基本: 优势: 结语 我的其他博客 前言 在当今互联网时代,安全、高效的用户身份验证和资源授…

关于Python里xlwings库对Excel表格的操作(三十二)

这篇小笔记主要记录如何【如何使用“Chart类”、“Api类"和“Axes函数”设置坐标轴标题文本内容】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库…

Sip - Ubuntu 配置 miniSIPServer 服务器(测试用)

客户提供的账号过期了,简单搭建 SIP 服务器,以便测试使用。个人认为这个配置起来最为简单,且测试功能足够。 官网miniSIPServer - 基于 Windows 以及 Linux 平台的 VoIP (SIP) 服务器软件. miniSIPServer 可能是最容易使用的 VoIP(SIP) 服务器…

【国产mcu填坑篇】华大单片机(小华半导体)一、SPI的DMA应用(发送主机)HC32L136

最近需要用华大的hc32l136的硬件SPIDMA传输,瞎写很久没调好,看参考手册,瞎碰一天搞通了。。。 先说下我之前犯的错误,也是最宝贵的经验,供参考 没多看参考手册直接写(即使有点烂仍然提供了最高的参考价值。…

基于STM32和ESP8266的物联网应用开发与实现

基于STM32和ESP8266的物联网应用开发与实现可以实现智能家居、智能工业、环境监测等多种应用,它将结合STM32微控制器的实时控制能力和ESP8266无线通信模块的WiFi连接能力。在本文中,我们将介绍如何设计和实现这样的物联网应用,并提供相关的代…

2024年AMC8往年真题练一练和答案详解(6),还有全真模拟题

今天是1月13日,2024年AMC8正式比赛已经倒计时了,昨天AMC主办方给所有参赛选手发了短信通知,关于模拟竞赛的操作方式和实际比赛的要求指南,大家一定要认真阅读,严格按指南操作,六分成长也会详细为大家解读和…

SQL Server的彻底卸载的方式

这篇文章主要介绍了SQL Server的彻底卸载的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 SQL Server的彻底卸载与再次安装 可能大家已经有深刻体会,SQL Server的卸载十分繁琐。最让人头…

Web3的应用发展及其影响

Web3,又被称为去中心化Web,是互联网发展的一个阶段,其核心特点是数据的去中心化和用户自主权。近年来,随着区块链技术的不断成熟,Web3的应用也得到了广泛的关注和发展。在这篇文章中,我们将深入探讨Web3目前…

sqlilabs第五十一五十二关

Less-51(GET - Error based - ORDER BY CLAUSE-String- Stacked injection) 手工注入 源码 单引号闭合用注释(没有后续输出只能堆叠注入) 自动注入 和上一关一样 Less-52(GET - Bind based - ORDER BY CLAUSE-numeric- Stacked injection) 手工注入 数字类型 不用注释直接…

uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…

[机缘参悟-125] :实修 - “心性、自性”与“知识、技能”的区别,学习、修、悟的区别?

目录 一、“知识、技能” 1.1 什么是知识技能 1.2 知识、技能的位置 1.3 知识、技能的学习方法 二、"明心见性" 2.1 什么是"明心见性" 2.2 "明心见性"解读 2.2.1 何其自性&#xff0c;本自清净&#xff1b; 2.2.2 何其自性&#xff0c;…