Redis 7.x 系列【17】四种持久化策略
有道无术,术尚可求,有术无道,止于术。
本系列Redis 版本 7.2.5
源码地址:https://gitee.com/pearl-organization/study-redis-demo
文章目录
- 1. 概述
- 2. 案例演示
- 2.1 无持久化
- 2.2 RDB
- 2.3 AOF
- 2.4 混合模式
- 2.4.1 方式一: 同时开启
- 2.4.2 方式二: 只开启 AOF
1. 概述
持久化官方文档
在前两篇文档中,我们学习了RDB
、AOF
的相关知识,它们各有优缺点。在实际应用中,需要根据场景选择适合的持久化策略。
Redis
支持以下四种方式:
- 无持久化:同时关闭
RDB
、AOF
RDB
:只开启RDB
AOF
:只开启AOF
- 混合模式:同时支持
RDB
、AOF
2. 案例演示
2.1 无持久化
适用于以下场景:
- 缓存层:作为数据库查询缓存时,如果数据丢失,可以重新获取并填充到缓存中,持久化不是必需的。
- 实时分析:在实时数据流处理或分析中,
Redis
可能被用作一个中间存储层,用于聚合、过滤或转换数据。由于这些数据通常是实时生成的,并且只在一段时间内需要,因此可能不需要持久化。一旦分析完成或数据过期,它们就可以被丢弃。 - 临时存储:在某些应用中,
Redis
可能被用作临时存储来存储会话数据、临时令牌或其他短生命周期的信息。由于这些数据本质上是临时的,并且在一段时间后会被丢弃或失效,因此可能不需要持久化。
在redis.conf
中同时关闭RDB
、AOF
:
save ""
appendonly no
注意,关闭后是依然可以使用save
、bgsave
、bgrewriteaof
命令生成文件。
默认启用RDB
,所以在安装目录可以看到 dump.rdb
文件:
将 dump.rdb
文件删除,然后启动 Redis
,虽然之前存入了数据,但是因为没有恢复文件,所以数据库是空:
重新存入数据后,由于禁用了 RDB
,所以不会生成dump.rdb
文件,一旦重新启,所有数据将会丢失。
2.2 RDB
Redis
默认启用RDB
持久化,只生成单个二进制文件,比AOF
性能更好,但是可能会存在数据丢失问题。Redis
本身是十分稳定的,适用于对数据一致性要求不是特别高的场景:
- 主从复制:
Redis
主从复制架构中,RD
B被用作数据同步的一种机制。主节点可以生成RDB
文件,然后发送给从节点,用于初次全量复制或连接重建时的快速同步。 - 恢复和备份:
RDB
文件是一个紧凑的二进制文件,可以很方便地进行备份、传输和恢复。 - 缓存层:作为数据库缓存时,如果数据丢失,可以重新获取并填充到缓存中。
在redis.conf
中开启RDB
:
# 关闭
# save ""
# 开启,每隔600秒(10分钟)检查一次,如果在这段时间内至少发生了10次写操作,则执行一次RDB快照保存
save 600 10
存入数据后,关闭Redis
时,会触发生成RDB
文件。重启时会重新加载到内存中。执行多次写入操作,可以看到触发了保存规则,开启了子线程进行RDB
生成:
总结:可以接受在灾难情况下丢失几分钟的数据。
2.3 AOF
AOF
相较于 RDB
其主要缺点就是性能不如 RDB
,适用于数据一致性要求较高的场景。默认情况下是关闭的,需要在redis.conf
中主动开启:
# 关闭 RDB
save ""
# 开启AOF
appendonly yes
重启 Redis
后,在控制台可以看到创建了AOF
的基础文件和增量文件:
在 appendonlydir
(默认存储目录)下可以看到相关文件:
2.4 混合模式
RDB
、AOF
各有特点,在技术选型时是一个权衡点,其特点对比如下:
RDB | AOF | |
---|---|---|
持久化机制 | 定期保存快照 | 实时命令追加 |
文件大小 | 二进制文件,体积较小 | 文本、二进制文件,体积较大 |
恢复速度 | 原生压缩数据,速度快 | 写命令数据,相对较慢 |
容灾能力 | 数据可能有丢失 | 数据可能有丢失(最后一条命令或最后一秒) |
使用场景 | 定期备份、大规模数据恢复 | 低/轻量级 |
资源消耗 | 高/重量级 | 数据丢失容忍度低 |
启动优先级 | 低 | 高 |
在官方文档中,有提到如果想要获得与 PostgreSQL
级别的数据安全性,应该同时使用两种持久化方式。
2.4.1 方式一: 同时开启
在配置文件中同时开启RDB
、AOF
持久化:
# 开启RDB
save 600 10
# 开启AOF
appendonly yes
当触发了规则后,会同时生成RDB
、AOF
文件:
同时开启的条件下,重启时会优先读取AOF
文件:
这种方式下,同时维护两套持久化机制,对性能会造成一定的影响。
2.4.2 方式二: 只开启 AOF
AOF
本身已经提供了混合持久化机制,在Redis 7.x 系列【16】持久化机制之 AOF中有介绍过一个配置参数:
aof-use-rdb-preamble yes
在 Redis 6
中,开启此配置后(默认开启),重写 的AOF
文件由两个不同的部分组成:
RDB file
:数据快照AOF tail
:记录写操作
在重启加载过程中,Redis
会识别 AOF
文件以 “REDIS
” 字符串开头,并加载 RDB
快照数据,然后继续加载 AOF
相关的内容,以实现更快的重写和恢复速度。
在 Redis 7
中,开启此配置后(默认开启),在 AOF
重写时,会将当前时刻的数据快照保存为单个的 RDB
文件,后续的写操作也保存为单独的 AOF
文件:
在全量备份时,这里的 RDB
文件可以作为恢复文件,无需再单独执行 BGSAVE
命令,由于是在触发重写后才会更新文件,可能会丢失重写后的数据。
相关文章:

Redis 7.x 系列【17】四种持久化策略
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一:…...

开发经验:go切片的继承
package main import ( "errors" "fmt" ) // LimitedSlice 是一个封装了切片的结构体,用于限制切片的最大容量 type LimitedSlice struct { slice []int maxCap int } // NewLimitedSlice 创建一个新的LimitedSlice实例ÿ…...

PyQt5事件机制解析:从原理到实战一网打尽!
PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...

GraphQL与RESTful API的区别和优势
GraphQL GraphQL是一种用于API设计的语言和查询协议,由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段,而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中,客户端发送一个单一的请求,而服务器返…...

关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...

【HarmonyOS NEXT】鸿蒙Socket 连接
简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP:传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发 ),系统具有完整的源代码和…...

【vue】实现自动轮播+滚轮控制
前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”
随着数字经济时代的到来,数据已成为最有价值的生产要素,是企业的重要资产之一。随着数据流动性的增强,数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业,面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活
在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类
学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninsta…...

【Python】变量与基本数据类型
个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据:参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…...

Unity按键表大全
Unity键值对应表# KeyCode是由Event.keyCode返回的。这些直接映射到键盘上的物理键,以下是键值对应列表: 常用键# Backspace 退格键 Delete Delete键 TabTab键 Clear Clear键 Return 回车键 Pause 暂停键 Escape ESC键 Space 空格键 小键盘# …...

第一周java。2
方法的作用 将重复的代码包装起来,写成方法,提高代码的复用性。 方法的语法 方法的语法格式如下 : [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体return 返回值; } 定义方法语法格式的详细说明如下…...

Arduino - Keypad 键盘
Arduino - Keypad Arduino - Keypad The keypad is widely used in many devices such as door lock, ATM, calculator… 键盘广泛应用于门锁、ATM、计算器等多种设备中。 In this tutorial, we will learn: 在本教程中,我们将学习: How to use key…...

国产芯片方案/蓝牙咖啡电子秤方案研发
咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…...

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用
react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹,然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…...

剧本杀小程序:助力商家发展,提高游戏体验
近几年,剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比,剧本杀游戏具有强大的社交性,玩家在游戏中既可以推理玩游戏,也可以与其他玩家交流互动,提高玩家的游戏体验感。 随着互联网的发展…...

pikachu靶场 利用Rce上传一句话木马案例(工具:中国蚁剑)
目录 一、准备靶场,进入RCE 二、测试写入文件 三、使用中国蚁剑 一、准备靶场,进入RCE 我这里用的是pikachu 打开pikachu靶场,选择 RCE > exec "ping" 测试是否存在 Rce 漏洞 因为我们猜测在这个 ping 功能是直接调用系统…...

CenterOS7安装java
CenterOS7安装java #进入安装目录 cd /usr/local/soft/java#wget下载java8 #直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了 #不时间的下载链接不一样 wget http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c9…...

react 重新加载子组件
在React中,要重新加载某个子组件,你可以通过改变该组件的key属性来强制它重新渲染。这是因为React会在key变化时销毁旧的组件实例并创建一个新的实例。 多的不说直接上代码 import React, { useState } from react; import ChildComponent from ../chil…...

从零开始使用WordPress搭建个人网站并一键发布公网详细教程
文章目录 前言1. 搭建网站:安装WordPress2. 搭建网站:创建WordPress数据库3. 搭建网站:安装相对URL插件4. 搭建网站:内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…...

浅谈chrome引擎
Chrome引擎主要包括其浏览器内核Blink、JavaScript引擎V8以及其渲染、网络、安全等子系统。下面我将对这些关键部分进行简要说明分析 1. Blink浏览器内核 Blink是Google开发的浏览器排版引擎,自Chrome 28版本起替代了Webkit作为Chrome的渲染引擎。Blink基于Webkit…...

【常用知识点-Java】创建文件夹
Author:赵志乾 Date:2024-07-04 Declaration:All Right Reserved!!! 1. 简介 java.io.File提供了mkdir()和mkdirs()方法创建文件夹,两者区别:mkdir()仅创建单层文件夹,如…...

【JavaScript脚本宇宙】颜色处理神器大比拼:哪款JavaScript库最适合你?
提升设计与开发效率:深入解析六大颜色处理库 前言 在现代前端开发中,颜色处理是设计和用户体验的重要组成部分。无论是网页设计、数据可视化还是图形设计,都需要强大的颜色处理功能来实现多样化的视觉效果。本文将探讨几种流行的JavaScript…...

怎么录制电脑内部声音?好用的录音软件分享,看这篇就够了!
如何录制电脑内部声音?平时使用电脑工作,难免会遇到需要录音的情况。好用的录音软件有很多,也有部分录屏工具也支持录音功能。 那么如何录制电脑内部声音呢?本文整理了几个录制电脑内部声音的方法,如果你需要在电脑上录…...

ios CCNSDate.m
// // CCNSDate.h // CCFC // // Created by xichen on 11-12-17. // Copyright 2011年 ccteam. All rights reserved. //#import <Foundation/Foundation.h>interface NSDate(cc)// 获取系统时间(yyyy-MM-dd HH:mm:ss.SSS格式)(NSString *)getSystemTimeStr;// prin…...

Windows系统安装SSH服务结合内网穿透配置公网地址远程ssh连接
前言 在当今的数字化转型时代,远程连接和管理计算机已成为日常工作中不可或缺的一部分。对于 Windows 用户而言,SSH(Secure Shell)协议提供了一种安全、高效的远程访问和命令执行方式。SSH 不仅提供了加密的通信通道,…...

虚拟机与主机的联通
本地光纤分配地址给路由器--》连结路由器是连结局域网--》由路由器分配IP地址 因此在网站上搜索的IP与本机的IP是不一样的 1.windows查看主机IP地址 在终端输入 2.linux虚拟机查看ip 3.主机是否联通虚拟机ping加ip...

2024年中国网络安全市场全景图 -百度下载
是自2018年开始,数说安全发布的第七版全景图。 企业数智化转型加速已经促使网络安全成为全社会关注的焦点,在网络安全边界不断扩大,新理念、新产品、新技术不断融合发展的进程中,数说安全始终秉承科学的方法论,以遵循…...