面试系列 - Redis持久化机制详解
目录
一、Redis 持久化机制
二、混合使用 RDB 和 AOF
三、 RDB(Redis DataBase)详解
四、AOF(Append-Only File)详解
Redis 是一个内存数据库,为了持久化数据以确保数据不会在服务器重启时丢失,Redis 提供了两种主要的持久化机制。
一、Redis 持久化机制
-
RDB 快照持久化: RDB 持久化是将 Redis 数据库的状态保存到磁盘文件的一种方式。它可以根据配置的条件自动定期进行快照,也可以手动触发。RDB 文件是二进制的,可以轻松地在不同的 Redis 实例之间复制和迁移。
-
触发快照: RDB 快照可以通过执行 SAVE 或 BGSAVE 命令来触发。SAVE 命令会阻塞 Redis 服务器,而 BGSAVE 命令在后台执行。
-
配置条件: 您可以在配置文件中设置 RDB 持久化的条件,例如在一定时间内有多少次写操作,或者在一定时间内有多少字节的数据发生变化时执行快照。
-
恢复: 在服务器启动时,Redis 可以加载最近的 RDB 文件以还原数据。
-
-
AOF 日志持久化: AOF(Append-Only File)持久化是将每个写操作以追加的方式写入一个日志文件。这个文件包含了将数据库状态从空文件还原到当前状态所需的所有写操作。AOF 文件是一个文本文件,易于查看和修复。
-
持久化方式: Redis 支持三种 AOF 持久化方式:关闭(no)、每个写命令(everysec)和每个写命令并同步到磁盘(always)。"everysec" 是最常用的方式,它将写入操作每秒同步到磁盘一次,提供良好的持久化性能和数据安全性。
-
重写: Redis 还支持 AOF 文件的重写,通过删除冗余的写操作来减小 AOF 文件的体积。
-
恢复: 在服务器启动时,Redis 会重新执行 AOF 文件中的写操作来还原数据库状态。
-
二、混合使用 RDB 和 AOF
混合使用 RDB 和 AOF 持久化是一种常见的做法,可以充分利用两种持久化机制的优势,同时提供灵活的数据备份和恢复策略。以下是一些常见的方式来混合使用 RDB 和 AOF 持久化:
-
同时启用 RDB 和 AOF: 这是最简单的方式。您可以在 Redis 的配置文件中同时启用 RDB 和 AOF 持久化。这样,在每次触发 RDB 快照时,同时也会将写操作追加到 AOF 文件中。这提供了快速的数据恢复和较低的持久化延迟。
save 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照 appendonly yes # 启用 AOF 持久化
-
使用 RDB 进行周期性备份,同时启用 AOF 持久化: 在这种方式下,您可以配置 Redis 定期执行 RDB 快照,例如每小时一次,以备份数据。与此同时,启用 AOF 持久化来记录所有写操作,以提供实时的数据持久化和恢复。这种方式在需要定期备份数据的情况下尤其有用。
save 3600 1 # 每小时执行一次 RDB 快照 appendonly yes # 启用 AOF 持久化
-
使用 RDB 备份,AOF 作为实时数据记录: 在这种方式下,您可以仅配置 RDB 快照以备份数据,而 AOF 仅用于实时记录写操作。这种方式适用于需要快速恢复数据的情况,因为 RDB 恢复速度比 AOF 快。
save 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照 appendonly yes # 启用 AOF 持久化,但只用于记录写操作
-
定期重写 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 持久化的一些关键特点和工作原理:
-
触发快照: RDB 持久化可以通过执行
SAVE
命令(会阻塞服务器)或BGSAVE
命令(在后台执行)来触发。BGSAVE
是常见的方式,因为它不会阻塞 Redis 服务器的正常操作。 -
快照频率: 您可以在 Redis 配置文件中设置 RDB 持久化的触发条件,例如在一定时间内有多少次写操作,或者在一定时间内有多少字节的数据发生变化时执行快照。例如:
confCopy codesave 900 1 # 在900秒内,如果至少有1个键发生变化,则执行快照
-
生成 RDB 文件: 当 RDB 持久化触发时,Redis 会将当前数据库的快照保存到一个二进制文件中,通常命名为
dump.rdb
。这个文件包含了当前数据库的所有数据,包括键、值、数据类型等信息。 -
数据恢复: 在服务器重启时,Redis 会检查是否存在 RDB 文件,如果存在,将使用 RDB 文件中的数据来还原数据库状态。这使得 Redis 可以在服务器重启后快速恢复数据。
-
备份和迁移: RDB 文件可以轻松地复制到其他 Redis 实例,从而进行数据备份、迁移或在测试环境中使用相同的数据。
-
手动执行 RDB 快照: 您也可以使用
SAVE
命令手动触发 RDB 快照,但请注意,这会阻塞 Redis 服务器,可能会影响性能。
RDB 持久化适用于需要定期备份数据的情况,例如在服务器崩溃后快速还原数据。但需要注意的是,RDB 快照是一个点对点的备份,如果在快照生成后到下一次快照之前发生数据丢失,那么这部分数据将无法恢复。因此,对于需要实时数据持久化的场景,可以考虑同时使用 AOF(Append-Only File)持久化机制,以提供更高的数据安全性。
四、AOF(Append-Only File)详解
AOF(Append-Only File)是 Redis 的另一种持久化机制,它用于记录每个写操作,将写操作以追加的方式记录到一个日志文件中。AOF 持久化机制通常用于提供更实时的数据持久化和恢复,以及更好的数据安全性。
以下是 AOF 持久化的一些关键特点和工作原理:
-
持久化方式: AOF 持久化可以以不同的方式配置,包括关闭(no)、每个写命令(everysec)和每个写命令并同步到磁盘(always)等。最常见的配置是每秒一次(everysec),它会将写操作每秒同步到磁盘一次。
appendonly yes # 启用 AOF 持久化 appendfsync everysec # 每秒同步写操作到磁盘
-
AOF 文件格式: AOF 文件是一个文本文件,它以易于人类阅读的方式记录了每个写操作的详细信息。这使得 AOF 文件可以轻松地查看、编辑和修复。AOF 文件包含了将数据库状态从一个空文件还原到当前状态所需的所有写操作。
-
重写 AOF 文件: 为了减小 AOF 文件的体积,Redis 提供了 AOF 文件的重写功能。AOF 文件重写会分析现有的 AOF 文件并生成一个新的文件,其中只包含对当前数据库状态的有效写操作,删除了冗余的写操作。
auto-aof-rewrite-min-size 64mb # 当 AOF 文件达到64MB时触发重写 auto-aof-rewrite-percentage 100 # 当执行的写操作数达到原始文件的100%时触发重写
-
数据恢复: 在服务器启动时,Redis 会重新执行 AOF 文件中记录的写操作来还原数据库状态。因为 AOF 文件包含了每个写操作的详细信息,所以它提供了更高的持久化粒度和更好的数据安全性。
-
备份和复制: AOF 文件可以轻松地复制到其他 Redis 实例,从而进行数据备份、迁移或在测试环境中使用相同的数据。
-
实时记录: AOF 持久化以实时方式记录每个写操作,这意味着即使 Redis 服务器崩溃,您也不会丢失太多数据,因为每个写操作都已被记录。
AOF 持久化通常用于需要更高数据安全性和实时数据持久化的场景,但与 RDB 不同,AOF 文件可能会比 RDB 文件大,因为它包含了所有写操作的详细信息。因此,在生产环境中,通常会结合使用 RDB 和 AOF 持久化,以提供备份和恢复的多层保护。
相关文章:
面试系列 - Redis持久化机制详解
目录 一、Redis 持久化机制 二、混合使用 RDB 和 AOF 三、 RDB(Redis DataBase)详解 四、AOF(Append-Only File)详解 Redis 是一个内存数据库,为了持久化数据以确保数据不会在服务器重启时丢失,Redis 提供了两种主要的持久化机…...
Ceph入门到精通-存储集群ceph df 用量统计算法说明
3.2.5. Ceph 如何计算数据使用量 used 值反映了使用的实际原始存储量。xxx GB / xxx GB 代表可用的存储(其中较小的数字)和总存储容量。总容量反映了在复制、克隆或快照前存储数据的大小。因此,实际存储的数据量通常会超过名义上的存储量。这…...
堡垒机的相关介绍
描述 堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审…...
无涯教程-JavaScript - INDIRECT函数
描述 INDIRECT函数返回由文本字符串指定的引用。 如果您在Excel公式中键入引用B1,则Excel会理解这引用了单元格B1。但是,Excel无法将文本字符串" B1"理解为引用。因此,如果单元格引用采用文本字符串的形式,则需要使用INDIRECT函数将其转换为实际的单元格引用。 立…...
LiveNVR监控流媒体Onvif/RTSP功能-支持海康摄像头海康NVR通过EHOME协议ISUP协议接入分发视频流或是转GB28181
LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…...
一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧
说在前面 一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧 🌕🌕🌕 插件设计 效果 首先我们应该要先确定一下我们想要实现的效果是怎样的,如上图,我们希望在页面上鼠标点击的时候会在点击区域随…...
CentOS8安装mysql-community-client错误解决
安装MySQL5.7.37的mysql-community-client-5.7.37-1.el7.x86_64.rpm时,提示如下: 提示的意思是缺少依赖软件包。 使用如下命令安装依赖包: yum install libncurse* 实际安装如下两个软件包。 成功后再次安装mysql-community-client-5.7.37…...
故障排除指南:解决 Kibana Discover 加载中的 6 个常见问题
作者:Steffanie Nestor Discover 是 Elastic 的核心 Kibana UI,用于搜索、过滤和检查(时间序列)数据。 可视化用于数据聚合/摘要。 Discover UI 对于大数据 Elasticsearch 响应具有弹性,但有时会因(未压缩的…...
创建一个简单的外卖订餐系统
在今天的快节奏生活中,外卖订餐系统已经成为了人们日常生活中不可或缺的一部分。这些系统通过在线点餐和配送服务,为用户提供了便捷的用餐体验。在本文中,我们将创建一个简单的外卖订餐系统,使用Python和Flask框架构建后端&#x…...
《追逐胜利:编程之路上的三子棋游戏实践》
文章目录 前言一、三子棋游戏规则二、步骤详解1.游戏菜单的实现2.棋盘的实现2.1 初始化棋盘2.2 打印棋盘 3.游戏逻辑实现3.1 玩家下棋3.2 电脑下棋 4.判断输赢4.1 win函数实现 5.完整代码 总结 前言 大家好!我是艾老虎尤!今天我很高兴来和大家分享我最近…...
身份和访问管理解决方案:混合型IAM
对于依赖于本地 IT 基础结构和传统安全模型的组织,可以更轻松地验证和授权企业网络内的所有内容,包括设备、用户、应用程序和服务器。尝试从公司网络外部获取访问权限的用户使用虚拟专用网络 (VPN) 和网络访问控制 (NA…...
微信小程序动态添加表单模块
先来看看效果: 屏幕录制 2023-09-14 16.33.21 点击添加请假按钮,就会新增一个请假信息表单;点击左上角红色删除按钮,删除当前表单; 源码下载地址:https://download.csdn.net/download/xq30397022/88339822…...
HTML5+CSS3小实例:纯CSS实现彩虹倒映水面的唯美背景
实例:纯CSS实现彩虹倒映水面的唯美背景 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" …...
Beautiful Soup简介
BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。它提供了一种简单而直观的方式来遍历、搜索和修改HTML或XML文档的结构。 以下是一些BeautifulSoup的主要功能: 解析器:BeautifulSoup支持多种解析器,包括Python的内置…...
Springboot2.7集成websocket及相关问题
1、集成websocket完整代码 导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 服务端代码 (1)注入bean Configur…...
MES管理系统和ERP系统在生产制造管理中的应用
MES生产管理系统通过过程管理、质量管理、设备管理、产品跟踪和溯源、性能分析和物料管理等方面来管理生产制造,旨在建立规范的生产管理信息平台,提高企业核心竞争力。ERP系统则通过制定生产计划、细分物料需求计划、车间订单下达和生产回报等步骤进行生…...
Netty Channel 详解
优质博文:IT-BLOG-CN 一、Netty 服务端启动过程 【1】创建服务端Channel; 【2】初始化服务端Channel; 【3】注册Selector; 【4】端口绑定:我们分析源码的入口从端口绑定开始,ServerBootstrap的bind(int in…...
技师学院物联网实训室建建设方案
一、概述 1.1专业背景 物联网(Internet of Things)被称为继计算机、互联网之后世界信息产业第三次浪潮,它并非一个全新的技术领域,而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升,是随着传感网、通…...
SpringBoot项目--电脑商城【增加/减少购物车商品数量】
1.持久层[Mapper] 1.1规划需要执行的SQL语句 1.更新该商品的数量.此SQL语句无需重复开发 update t_cart set num?,modified_user?,modified_time? where cid? 2.首先进行查询需要操作的购物车数据信息【查看该条数据是否存在】 SELECT * FROM t_cart WHERE cid?2.接口…...
CSS元素浮动
概述 浮动简介 在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。 元素浮动后的特点 脱离文档流。不管浮动前是什么元素,浮动后,默认宽与高都是被内容撑开的(尽可能小)&am…...
MATLAB中islocalmin函数用法
目录 语法 说明 示例 向量中的局部最小值 矩阵行中的最小值 相隔最小值 最小值平台区 突出最小值 islocalmin函数的功能是计算局部最小值。 语法 TF islocalmin(A) TF islocalmin(A,dim) TF islocalmin(___,Name,Value) [TF,P] islocalmin(___) 说明 当在 A 的…...
Python+Requests+Pytest+YAML+Allure实现接口自动化
本项目实现接口自动化的技术选型:PythonRequestsPytestYAMLAllure ,主要是针对之前开发的一个接口项目来进行学习,通过 PythonRequests 来发送和处理HTTP协议的请求接口,使用 Pytest 作为测试执行器,使用 YAML 来管理测…...
双视觉Transformer(Dual Vision Transformer)
摘要 已经提出了几种策略来减轻具有高分辨率输入的自注意机制的计算:比如将图像补丁上的全局自注意过程分解成区域和局部特征提取过程,每个过程都招致较小的计算复杂度。尽管效率良好,这些方法很少探索所有补丁之间的整体交互,因…...
MES系统成为工业4.0首选,制造业真正数字化车间你看过吗?
在日益激烈的市场竞争中,MES管理系统已经成为企业提升生产效率、降低成本、提高竞争力的关键。通过MES管理系统实现数据集成和分析,能够对产品制造过程的各个环节进行可视化控制,从设计、制造、质量、物流等环节全面掌控信息,实现…...
Vuex有几种属性以及它们的意义
有五种,分别是 State、 Getter、Mutation 、Action、 Module。 一、State Vuex 使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源 (SSOT)”而存在。这也意味着,每个应用将仅仅包含一个 store 实…...
PRBP20P-10/250C-EB、PRDP6G-10/30-CB电液比例直动式先导减压阀放大板
PRDP6P-10/30-CB、PRDP6R-10/50-DC、PRDP6G-10/30-CC、PRDP6P-10/50-CB、PRDP6R-10/30-CC、PRDP6G-10/30-CB电液比例直动式先导减压阀 PRBP10P-10/50C-EB、PRBP20P-10/100C-EC、PRBP30P-10/150C-EB、PRBP20P-10/250C-EB、PRBP10P-10/315C-EC、PRBP30P-10/350C-EB电液比例柱塞平…...
GDB之常见缩写命令(十九)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
MarkText快捷键(随时补充中)
MarkText快捷键 ctrl1:一号标题 (需要手动在【左上角】-【file】-【preferences】-【Key Bindings】-【 Transform into Heading 1】手动调整,先将【Switch tab to the 1st】占用快捷键删除才能在下面添加) ctrlg:添加…...
每日一题 1601最多可达成的换楼请求数目(子集模版)
题目 1601 我们有 n 栋楼,编号从 0 到 n - 1 。每栋楼有若干员工。由于现在是换楼的季节,部分员工想要换一栋楼居住。 给你一个数组 requests ,其中 requests[i] [fromi, toi] ,表示一个员工请求从编号为 fromi 的楼搬到编号为…...
排序算法-归并排序
属性 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序&#…...
wordpress 8080端口/百度seo是啥
一、PlantUML顺序图 语法学习小结、图例及用法 1.简单示例:你可以用->来绘制参与者之间传递的消息, 而不必显式地声明参与者。你也可以使用 --> 绘制一个虚线箭头。另外,你还能用 <- 和 <--,这不影响绘图,…...
github做网站空间/网络营销师课程
1.积木大赛 (block.pas/c/cpp) 【问题描述】 为了庆祝国庆,厦门一中举办了一年一度的“积木大赛”。 在2013年NOIP大赛中,夏夏同学己经搭建了宽度为n的大厦,其中第i块高度为hi。今年比赛的内容是对其NOIP2013搭建大厦进行扩建,使用…...
网站建设策略/吉林seo技术交流
转载于:https://www.cnblogs.com/hwgok/p/10940494.html...
网站地图插件/在百度上怎么打广告
查看数据库中的含long字段的表: SQL> select table_name from dba_tab_columns where data_typeLONG and ownerPHSI;TABLE_NAME --------------- PLAN_TABLE QUEST_SL_TEMP_E XPLAIN1SMP_LONG_TEXT SMP_LONG_TEXT_用expdp通过network_link导出PHSI下的所有对象&a…...
如何将网站做的更美观/广告联盟哪个比较好
文章目录从算法的角度,拉普拉斯的计算需要两张相邻分辨率的高斯图像(3840x2160,1920x1080),拉普拉斯对低分辨率的图像做上采样、填充之后卷积,然后和高分辨率的图像相减,得到残差(边缘纹理)。 …...
做网站能做职业吗/怎么注册自己公司的网址
使用Spring发送Email 转载:《Springinaction中文版》(第4版)...