面试系列 - Redis持久化机制详解

《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官... 阅读详情

目录

一、Redis 持久化机制

二、混合使用 RDB 和 AOF

 三、 RDB(Redis DataBase)详解

四、AOF(Append-Only File)详解


Redis 是一个内存数据库,为了持久化数据以确保数据不会在服务器重启时丢失,Redis 提供了两种主要的持久化机制。

一、Redis 持久化机制

  1. RDB 快照持久化: RDB 持久化是将 Redis 数据库的状态保存到磁盘文件的一种方式。它可以根据配置的条件自动定期进行快照,也可以手动触发。RDB 文件是二进制的,可以轻松地在不同的 Redis 实例之间复制和迁移。

    • 触发快照: RDB 快照可以通过执行 SAVE 或 BGSAVE 命令来触发。SAVE 命令会阻塞 Redis 服务器,而 BGSAVE 命令在后台执行。

    • 配置条件: 您可以在配置文件中设置 RDB 持久化的条件,例如在一定时间内有多少次写操作,或者在一定时间内有多少字节的数据发生变化时执行快照。

    • 恢复: 在服务器启动时,Redis 可以加载最近的 RDB 文件以还原数据。

  2. AOF 日志持久化: AOF(Append-Only File)持久化是将每个写操作以追加的方式写入一个日志文件。这个文件包含了将数据库状态从空文件还原到当前状态所需的所有写操作。AOF 文件是一个文本文件,易于查看和修复。

    • 持久化方式: Redis 支持三种 AOF 持久化方式:关闭(no)、每个写命令(everysec)和每个写命令并同步到磁盘(always)。"everysec" 是最常用的方式,它将写入操作每秒同步到磁盘一次,提供良好的持久化性能和数据安全性。

    • 重写: Redis 还支持 AOF 文件的重写,通过删除冗余的写操作来减小 AOF 文件的体积。

    • 恢复: 在服务器启动时,Redis 会重新执行 AOF 文件中的写操作来还原数据库状态。

二、混合使用 RDB 和 AOF

混合使用 RDB 和 AOF 持久化是一种常见的做法,可以充分利用两种持久化机制的优势,同时提供灵活的数据备份和恢复策略。以下是一些常见的方式来混合使用 RDB 和 AOF 持久化:

  1. 同时启用 RDB 和 AOF: 这是最简单的方式。您可以在 Redis 的配置文件中同时启用 RDB 和 AOF 持久化。这样,在每次触发 RDB 快照时,同时也会将写操作追加到 AOF 文件中。这提供了快速的数据恢复和较低的持久化延迟。

    save 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照          
    appendonly yes # 启用 AOF 持久化

  2. 使用 RDB 进行周期性备份,同时启用 AOF 持久化: 在这种方式下,您可以配置 Redis 定期执行 RDB 快照,例如每小时一次,以备份数据。与此同时,启用 AOF 持久化来记录所有写操作,以提供实时的数据持久化和恢复。这种方式在需要定期备份数据的情况下尤其有用。

    save 3600 1 # 每小时执行一次 RDB 快照                        
    appendonly yes # 启用 AOF 持久化
  3. 使用 RDB 备份,AOF 作为实时数据记录: 在这种方式下,您可以仅配置 RDB 快照以备份数据,而 AOF 仅用于实时记录写操作。这种方式适用于需要快速恢复数据的情况,因为 RDB 恢复速度比 AOF 快。

    save 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照            
    appendonly yes # 启用 AOF 持久化,但只用于记录写操作
  4. 定期重写 AOF 文件: 为了减小 AOF 文件的体积,您可以定期执行 AOF 文件的重写。这会删除冗余的写操作,以减少文件大小。定期重写通常是根据文件大小或执行的写操作数量来触发的。

    auto-aof-rewrite-min-size 64mb # 当 AOF 文件达到64MB时触发重写 
    auto-aof-rewrite-percentage 100 # 当执行的写操作数达到原始文件的100%时触发重写

 三、 RDB(Redis DataBase)详解

RDB(Redis DataBase)是 Redis 数据库的一种持久化机制,它用于将 Redis 数据存储在磁盘上,以便在服务器重启时可以快速恢复数据。RDB 以二进制格式将 Redis 数据库的快照保存到磁盘文件中,因此它通常用于创建 Redis 数据的点对点备份。

以下是 RDB 持久化的一些关键特点和工作原理:

  1. 触发快照: RDB 持久化可以通过执行 SAVE 命令(会阻塞服务器)或 BGSAVE 命令(在后台执行)来触发。BGSAVE 是常见的方式,因为它不会阻塞 Redis 服务器的正常操作。

  2. 快照频率: 您可以在 Redis 配置文件中设置 RDB 持久化的触发条件,例如在一定时间内有多少次写操作,或者在一定时间内有多少字节的数据发生变化时执行快照。例如:

    confCopy code
    
    save 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照
  3. 生成 RDB 文件: 当 RDB 持久化触发时,Redis 会将当前数据库的快照保存到一个二进制文件中,通常命名为 dump.rdb。这个文件包含了当前数据库的所有数据,包括键、值、数据类型等信息。

  4. 数据恢复: 在服务器重启时,Redis 会检查是否存在 RDB 文件,如果存在,将使用 RDB 文件中的数据来还原数据库状态。这使得 Redis 可以在服务器重启后快速恢复数据。

  5. 备份和迁移: RDB 文件可以轻松地复制到其他 Redis 实例,从而进行数据备份、迁移或在测试环境中使用相同的数据。

  6. 手动执行 RDB 快照: 您也可以使用 SAVE 命令手动触发 RDB 快照,但请注意,这会阻塞 Redis 服务器,可能会影响性能。

RDB 持久化适用于需要定期备份数据的情况,例如在服务器崩溃后快速还原数据。但需要注意的是,RDB 快照是一个点对点的备份,如果在快照生成后到下一次快照之前发生数据丢失,那么这部分数据将无法恢复。因此,对于需要实时数据持久化的场景,可以考虑同时使用 AOF(Append-Only File)持久化机制,以提供更高的数据安全性。

四、AOF(Append-Only File)详解

AOF(Append-Only File)是 Redis 的另一种持久化机制,它用于记录每个写操作,将写操作以追加的方式记录到一个日志文件中。AOF 持久化机制通常用于提供更实时的数据持久化和恢复,以及更好的数据安全性。

以下是 AOF 持久化的一些关键特点和工作原理:

  1. 持久化方式: AOF 持久化可以以不同的方式配置,包括关闭(no)、每个写命令(everysec)和每个写命令并同步到磁盘(always)等。最常见的配置是每秒一次(everysec),它会将写操作每秒同步到磁盘一次。

    appendonly yes # 启用 AOF 持久化 
    appendfsync everysec # 每秒同步写操作到磁盘
  2. AOF 文件格式: AOF 文件是一个文本文件,它以易于人类阅读的方式记录了每个写操作的详细信息。这使得 AOF 文件可以轻松地查看、编辑和修复。AOF 文件包含了将数据库状态从一个空文件还原到当前状态所需的所有写操作。

  3. 重写 AOF 文件: 为了减小 AOF 文件的体积,Redis 提供了 AOF 文件的重写功能。AOF 文件重写会分析现有的 AOF 文件并生成一个新的文件,其中只包含对当前数据库状态的有效写操作,删除了冗余的写操作。

    auto-aof-rewrite-min-size 64mb # 当 AOF 文件达到64MB时触发重写 
    auto-aof-rewrite-percentage 100 # 当执行的写操作数达到原始文件的100%时触发重写
  4. 数据恢复: 在服务器启动时,Redis 会重新执行 AOF 文件中记录的写操作来还原数据库状态。因为 AOF 文件包含了每个写操作的详细信息,所以它提供了更高的持久化粒度和更好的数据安全性。

  5. 备份和复制: AOF 文件可以轻松地复制到其他 Redis 实例,从而进行数据备份、迁移或在测试环境中使用相同的数据。

  6. 实时记录: AOF 持久化以实时方式记录每个写操作,这意味着即使 Redis 服务器崩溃,您也不会丢失太多数据,因为每个写操作都已被记录。

AOF 持久化通常用于需要更高数据安全性和实时数据持久化的场景,但与 RDB 不同,AOF 文件可能会比 RDB 文件大,因为它包含了所有写操作的详细信息。因此,在生产环境中,通常会结合使用 RDB 和 AOF 持久化,以提供备份和恢复的多层保护。

信创改造实战:SpringBoot项目迁移到宝兰德BES 9.5.5的完整避坑指南(附依赖配置) 本文详细介绍了将SpringBoot项目迁移到宝兰德BES 9.5.5中间件的完整流程,包括环境准备、依赖调整、Web.xml版本适配、部署配置优化及常见问题解决方案。特别针对信创改造需求,提供了排除Tomcat依赖、处理BES专用starter等实用技巧,帮助开发者顺利完成国产中间件迁移。 阅读详情

相关推荐

Zabbix7.4监控系统在Rocky Linux10.0上的完整部署流程(含MariaDB配置)

本文详细介绍了在Rocky Linux 10.0操作系统上部署企业级监控系统Zabbix 7.4的完整流程,并重点阐述了与MariaDB数据库的深度集成与性能优化配置。内容涵盖从系统环境准备、数据库安装与安全加固、Zabbix核心组件部署,到服务配置、Web界面初始化以及生产环境高级调优的全方位实战指南,旨在帮助用户构建稳定高效的监控平台。

weixin_29200741的博客 328

Redis的持久化详解

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

怪咖@的博客 3万+

手把手教你用HiNet实现图像隐藏:可逆神经网络实战指南(附代码)

本文提供了一份基于HiNet框架实现图像隐藏的实战指南。通过详细解析可逆神经网络原理,手把手指导环境搭建、模型构建、损失函数设计及训练流程,并附有完整代码。该方法利用单个可逆网络统一隐藏与恢复过程,结合小波变换提升隐蔽性,为信息隐藏应用提供了高效解决方案。

rgv234567的博客 433

redis持久化操作及其原理详解

文章目录Redis 持久化机制1. 快照(RDB)1.1 特点1.2 生成方式1.3 配置生成快照的名称和位置2. AOF持久化2.1 特点2.1 开启AOF持久化2.2 日志追加频率2.3 AOF文件的重写2.3.1 AOF带来的问题2.3.2 AOF重写2.3.3 重写原理 Redis 持久化机制 什么是redis持久化: 简而言之,把redis内存中的数据保存到磁盘的过程就是持久化。 redis 官方提供了两种持久化机制: 快照(Snapshot)保存某一时刻的数据状态 AOF(Append O

0x1db的博客 928

基于工作流的低代码AI应用开发:Flock平台核心架构与实战指南

在AI应用开发领域,工作流编排正成为连接大语言模型(LLM)能力与复杂业务逻辑的关键技术。其核心原理是将任务分解为模块化节点,通过可视化方式定义执行顺序与数据流向,从而实现灵活可控的自动化流程。这种范式极大地提升了开发效率,降低了技术门槛,使得开发者能够聚焦于业务设计而非底层代码。在技术价值层面,工作流编排支持检索增强生成(RAG)、多智能体协作等高级模式,并能通过人工干预节点确保关键流程的可靠性与合规性。其典型应用场景包括智能客服、自动化办公、数据分析助手等。本文以Flock平台为例,深入解析了如何利用其

weixin_26848497的博客 381

10、智慧变电站 - 加载vue大屏元素(整体效果)

这一篇文章非常简单,但是也非常出效果阅读前面几篇文章,都可以看到有顶部、左侧、右侧的面板,主要我不会录gif图片,大屏元素面板还有一些动态加载的效果。 vue的transition标签 Vue 提供了 transition 的封装组件,可以给任何元素和组件添加进入/离开过渡;在进入/离开的过渡中,会有 6 个 class 切换:v-enter 、v-enter-active 、v-enter-to 、v-leave 、v-leave-active 、v-leave-to。我们正好使用这个特性来达到面板进入

github_39988036的博客 1040

Redis 面试题——持久化

本文介绍了 Redis 持久化的相关面试题。

代码星辰的博客 1117

CloudCompare 多窗口联动显示点云

CloudCompare支持多窗口联动显示多个点云数据,可以用来比对原始点云数据与语义分割后的结果。 一、创建多个视窗 打开CloudCompare后会默认有一个视图,我们要同时打开两个数据就需要再创建一个视图,选择菜单栏里的3D Views,在下拉菜单中点击new,这样就创建了一个新的视图,这时3D Views的下拉菜单中有3D View 1和3D View 2两个视图,然后点击3D Views下拉菜单中的Title,这时在数据展示区就会出现两个并列的窗口。 二、分别加载点云数据 将数据分别拖进两个

zhaoguanhua的博客 2740

Redis持久化存储策略机制(RDB、AOF)

Redis持久化存储策略机制(RDB、AOF)

IT之一小佬的博客 5203

uniapp(安卓 | 苹果) - 最新详细实现App打包发布教程,uni-app苹果IOS软件应用上架App Store软件商店,uni-app打包发布安卓Android软件到各大应用商店(详细教程

uni-app,安卓android,苹果ios,uniapp App软件,Uniapp上架发布应用,打包构建,apk、app软件,应用商店,应用市场,app store,uni-app安卓苹果app上架应用商店,app应用从创建到上架_uniapp打包app的流程和上架,uniapp打包上架ios Appstore 最全流程,苹果应用商店上架教程,uniapp生成的app怎么上架到iphone的app store,uni-app打包到上架Android , ios完整详细流程,审核一直不通过,软件商店审核失

✅ 精选推荐文章 1万+

杰理接入第三方升级协议OTA教程

本教程介绍了使用dual_bank_updata_api.h接口接入第三方协议进行固件升级的方法。主要内容包括:INI配置要求(需启用双备份并强制4K对齐)、7个核心API接口功能说明及参数详解(初始化、空间检查、数据写入、校验等)、标准升级流程步骤(初始化→检查→写入→校验→引导→清理)。特别强调了4K对齐配置的重要性以避免数据丢失,并提供了被动升级流程图。该方案支持用户自定义协议接入,需严格按照流程调用接口完成升级。

qq_42014563的博客 1429

redis持久化机制详解(面试必备)

Redis持久化的意义主要在于故障恢复,比如你部署一个Redis,作为缓存有可能里边有一些比较重要的数据,如果没有持久化的时候,redis遇到特殊问题的时候就会有丢失所有的数据的风险。此过程不会影响主进程,重写完成后,新的写入将会写到新的aof中,大家好,今天给大家分享的是redis持久化机制,面试的过程中可能会遇到这些,希望能对大家有所帮助~(注,也可以是用自带的策略),但是最少也要5分钟进行一次的备份,恢复更快:因为rdb是数据的快照,基本上就是数据的复制,不用重新读取再写入内存。

m0_61523691的博客 387

Matlab之App Designer 一键自动生成带有表格的报告

本文采用案例讲解的方式介绍了采用Matlab中的App Designer开发可视化GUI分析界面后,实现一键自动导出带有表格报告的方法和步骤。可以实现从报告编制等繁琐的工作中解脱出来。

m0_59012156的博客 355

进阶Redis系列(十一):超全详解Redis持久化机制AOF(代码示例)【面试必问/工作常用】

工作常用,面试必问的Redis持久化机制AOF

一颗剽悍的种子的博客 916

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

进阶Redis系列(十):超全详解Redis持久化机制RDB(代码示例)【面试必问/工作常用】

工作常用,面试必问的Redis持久化机制RDB

一颗剽悍的种子的博客 1208

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【面试常问】Redis的持久化机制是什么?各自的优缺点?

Redis在我们日常开发中是必不可少的,但是有可能会造成数据的丢失,因此就有了持久化机制,而 Redis的持久化机制也是面试中的高频问题,决定整理一下;如有错误还请个位指正!

Willing卡卡的博客 1万+

Redis面试精讲 Day 3:Redis持久化机制详解

Redis持久化是指将内存中的数据以特定格式保存到磁盘的过程,目的是在Redis服务重启后能够恢复数据。Redis提供了两种主要的持久化方式:| 持久化方式 | 原理 | 数据安全性 | 恢复速度 || RDB | 定时生成内存快照 | 可能丢失最后一次快照后的数据 | 快 || AOF | 记录所有写操作命令 | 通常最多丢失1秒数据 | 慢 |RDB通过快照实现持久化,适合备份和快速恢复AOF记录写命令,提供更好的数据安全性混合持久化结合了两者优势,是推荐的配置方式。

在未来等你的专栏 1249

【Redis】Redis持久化之AOF详解(Redis专栏启动)

本文为Redis持久化系列第二篇,本文讲解兼具广度与深度,首先讲解什么是RedisAOF、如何开启AOF持久化,深入其AOF的原理,AOF持久化实现、AOF数据恢复、AOF三种写回硬盘策略、AOF重写机制,解析RedisAOF要先执行命令后写日志,以及在实战过程中AOF和RDB对比​​​​​​​,最后扩展Redis4.0新特性的混合持久化模式。

小明的Java问道之路 7915

Redis面试必问的持久化机制详解(附高频考点)

先来个场景模拟:假设你的购物车数据全存在Redis里,突然服务器断电了!)如果没做持久化,所有数据直接灰飞烟灭,用户第二天打开APP发现购物车空了…这里有个精妙的设计:重写过程是读取当前内存数据逆向生成命令,而不是处理原有AOF文件!当被问到"如何保证Redis数据绝对不丢失"时,千万别直接说"用AOF的always模式"!(划重点)建议准备1-2个实际调优案例,比如如何通过调整持久化配置解决OOM问题,这种实战经验特别加分!这样既展示了技术深度,又体现了架构思维,绝对让面试官眼前一亮!

no_network8的博客 1994

面试官:Redis如何实现持久化的、主从哨兵又是什么?

面试官:Redis如何实现持久化的、主从哨兵又是什么?

真正的大师永远怀着一颗学徒的心 1万+

Java面试-Redis 持久化机制:RDB 与 AOF

本文深入剖析Redis两大持久化机制——RDB与AOF,从技术原理到生产实践。RDB通过全量快照实现高效备份,利用CoW技术保证off主线程操作;AOF通过增量管理局志保障数据安全,支持多种fsync策略。文章对比显示:RDB恢复快但可能丢数据ft数据,AOF更安全但恢复较耗时间。文章推荐混合模式(RDB+AOF)作为最佳实践,并附配置模板与故障演练方案,帮助开发者构建高可靠的Redis数据存储方案。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

后端面试必备:Redis持久化机制详解

Redis作为一款高性能的内存数据库,为了保证数据安全,提供了多种持久化机制。本文将详细介绍Redis的两种主要持久化方式:RDB和AOF,并通过流程图帮助理解其工作原理。

qq_58299462的博客 1598

面试官:你知道Redis得持久化机制吗?

阅读文本大概需要 13 分钟。网上虽然已经有很多类似的介绍了,但我还是自己总结归纳了一下,自认为内容和细节都是比较齐全的。文章篇幅有 4k 多字,货有点干,断断续续写了好...

HollisChuang's Blog 4960

Redis持久化机制详解:面试必备知识点

Redis提供了RDB、AOF和混合持久化三种数据持久化机制。RDB通过定时快照实现,文件紧凑但可能丢失数据;AOF记录所有写操作,安全性高但文件较大;混合持久化结合两者优点。面试常考如何选择持久化策略:数据安全优先选AOF或混合,性能优先选RDB。生产环境推荐配置混合持久化或同时开启RDB+AOF,并合理设置同步策略和重写规则。

2301_79099460的博客 568

【Redis】Redis持久化之RDB详解(Redis专栏启动)

本文讲解Redis持久性机制RDB,RDB持久化的两种方法(RDB的两种策略方式、save和bgsave命令)并进行比较,如何使用RDB策略备份数据,分析Redis RDB优缺点,bgsave原理,bgsave执行流程,fork的实现原理(Copy On Write写时复制)。

小明的Java问道之路 8033

【Java面试系列】Redis面试题

目录 1.Redis 面试题 2.题目解析 1、什么是 Redis? Redis 与其他 key - value 缓存产品有以下三个特点: Redis 优势 Redis 与其他 key-value 存储有什么不同? 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区...

Yangy的博客 1万+

Redis面试宝典【刷题系列】

🪧Redis是一个高性能的Key-Value内存数据库,支持多种数据类型如StringListSetSorted Set和Hash。它通过将数据存储在内存中来实现快速读写,并通过异步方式将数据持久化到硬盘。Redis的优势在于其出色的性能和丰富的数据结构支持,但也存在物理内存容量限制的问题。RedLock是Redis官方提出的基于Redis实现分布式锁的算法,提供了互斥访问、避免死锁和高容错性的特性。

李赛赛的专栏 1914
上一篇: SpringBatch reader详解
下一篇: NoClassDefFoundError产生原因,及解决办法
境里婆娑
境里婆娑 新星创作者: Java技术领域 新星创作者: Java技术领域 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄10年 1万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

境里婆娑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值