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

目录

一、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 codesave 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 持久化,以提供备份和恢复的多层保护。

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

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

相关文章

执行 JUnit 单元测试前,修改环境变量

同一份代码,在不改变配置文件的情况下,可以连接不同的数据库,进行JUnit测试。 非开发、测试、生产环境的区别。而是 我就站在这里,指哪打哪! 避免重复造轮子,参考博文: 使用junit&spri…

python main 函数-启动-传递参数 python 打包 exe C# 进程传参

Part1:Python main 传递参数 在Python编程中,我们经常需要从命令行或其他外部环境中获取参数。Python提供了一种简单而灵活的方式来处理这些参数,即通过main函数传参 1.python main 函数-启动-传递参数 test.py import sysdef main():# 获取命令行参…

QT 自定义信号

自定义信号,需要 1.在singnals:区域下写信号函数,以及函数对应的参数 2. 需要emit关键字进行发射信号 3. 在需要处理该信号的其他类中,建立信号和其信号槽函数connect() 4. 在其他类中创建信号处理槽函数 #include "mythread.h"my…

Linux 中的 col 命令及示例

Linux 系统中的col命令用于过滤掉反向换行,使输出看起来更加正确,只有正向和半正向换行,并尽可能用制表符替换空白字符。这在处理 nroff 和 tbl 的输出时被证明是有用的。col 实用程序只是从标准输入读取并写入标准输出。 句法: 列 [-bfhpx] [-l num] col [-bfhpx] [-l nu…

C盘清理教程

C盘清理教程 首先使用space Sniffer 扫一下c盘,然后看一下到底是哪个文件这么大 第二步,创建软链接。 首先将我们需要移动的文件的当前路径拷贝下来:C:\Users\Tom\Desktop\test-link\abc\ghi.txt 然后假设剪切到D盘下:D:\ghi.…

Linux 中的 cmp 命令及示例

Linux/UNIX 中的cmp命令用于逐字节比较两个文件,帮助您找出两个文件是否相同。 当 cmp 用于比较两个文件时,如果发现差异,则将第一个不匹配的位置报告到屏幕,如果没有发现差异,即比较的文件相同。cmp 不显示任何消息,如果比较的文件相同,则仅返回提示。语法: cmp [选项…

基于改进人工蜂群算法的 K 均值聚类算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

RBTree模拟实现

一、概念 概念:红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍&a…

pdf拆分成多个文件的方法以及注意事项

PDF是一种非常流行的文件格式,但有时候我们需要将一个大的PDF文件拆分成多个小的文件,以便于管理和分享。本文将介绍一些拆分PDF文件的方法以及需要注意的事项。 AdobeAcrobat是一款专业的PDF编辑软件,可以轻松地拆分PDF文件。以下是使用Adob…

基于SpringBoot开发的停车位管理系统(调用百度地图api)

文章目录 项目介绍主要功能截图:前台:后台部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot开发的停车位管…

【建站教程】使用阿里云服务器怎么搭建网站?

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,阿小云来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#x…

Fiddler Inspectors AES解密插件开发

Fiddler Inspectors AES解密插件开发 业务数据做了AES加密处理,抓包看不到具体数据,找不到合适的插件 就自己动手写了一个,主要是使用fiddler提供的一个基类和三个接口 Inspector2, IRequestInspector2, IResponseInspector2, IB…

【2023研电赛】兆易创新命题三等奖: 低成本单母线电流永磁同步无感驱动器

本文为2023年第十八届中国研究生电子设计竞赛兆易创新企业命题三等奖以及决赛最佳论文奖分享,参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力,更有丰富电子礼品等你来领!,分享2023研电赛作品扩大影响力,更有…

通过阿贝云免费云服务器部署vue3+vite项目

通过阿贝云免费云服务器部署vue3vite项目 阿贝云:https://www.abeiyun.com 首先访问阿贝云登录后申请服务器,需要关注微信公众号绑定 然后我们给服务器安装操作系统,这里我使用了centos7.6 这里我使用finalshell 连接服务器 我们首先配置ng…

EPICS电机支持(asynMotor)

EPICS电机支持 1) 顶层对象是EPICS motor记录 已经对这个对象编写了很多代码:spec,IDL和Python类等 2)下一层是EPICS设备支持 了解motor记录,与驱动会话 3)最底层是EPICS驱动 对motor记录一无所知&am…

如何提取视频中的音频?几个步骤轻松提取

在现今社交媒体的风靡下,许多人都会使用手机录制视频来记录生活中的美好瞬间。有时候,我们也会想要提取视频中的音频,例如将自己的演讲录音分发给听众。本文将会介绍如何在手机上提取视频中的音频以及需要注意的事项。 使用应用程序 首先&am…

Linux命令200例:write用于向特定用户或特定终端发送信息

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师&#xff0…

Android高德地图截屏功能(可包含自定义控件)

一、不包含自定义控件 地图 SDK 支持对当前屏幕显示区域进行截屏,可以对地图、覆盖物(包含信息窗口)、Logo进行截取屏幕,这其中不包括地图控件、Toast窗口。 详细示例如下: // 对地图进行截屏aMap!!.getMapScreenSho…

正交试验设计法

正交实验设计 一、什么是正交试验设计法? 是一种成对测试交互的系统的统计方法。它提供了一种能对所有变量对的组合进行典型覆盖(均匀分布)的方法。 可以从大量的试验点中挑出适量的、有代表性的点,利用“正交表”,…

Python之数据库(MYSQL)连接

一)数据库SQL语言基础 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database…