Redis持久化的三种方式(RDB、AOF和混合)

news2024/12/23 10:29:30

Redis持久化的三种方式(RDB、AOF和混合)

目录

  • Redis持久化的三种方式(RDB、AOF和混合)
    • 介绍
    • RDB示例
      • 1.配置文件
      • 2.触发 RDB 快照保存
      • 3.验证
    • AOF示例
      • 1.配置文件
      • 2.校验
    • 混合型持久化存储
      • 配置文件

介绍

Redis数据主要存储与内存中,因此如果服务器意外重启、宕机、崩溃,那么数据就会全部丢失。而Redis持久化的意义就是为了当发生这些灾难时找回数据。

Redis 提供了两种主要的持久化方式:RDB(Redis Database)和 AOF(Append Only File)

  • RDB(Redis Database)
    • RDB 持久化通过创建一个名为 dump.rdb 的二进制文件来保存 Redis 数据库在某个时间点的快照。在 Redis 重启时,会加载这个文件来恢复数据。
  • AOF(Append Only File)
    • AOF 持久化通过记录服务器接收到的每一个写操作命令(如 set、del 等),以追加的方式写入到一个 AOF 文件中。Redis 重启时会通过重新执行 AOF 文件中的命令来恢复数据。

RDB示例

1.配置文件

redis.conf中修改rdb备份文件的名称,默认为dump.rdb

dbfilename dump.rdb

save修改触发快照条件

save 900 1  # 900 秒内至少有 1 个键被改变  
save 300 10 # 300 秒内至少有 10 个键被改变  
save 60 10000 # 60 秒内至少有 10000 个键被改变

dir设置 RDB 文件的存储目录,默认为 Redis 服务器的当前工作目录

dir /data

示例:

dbfilename dump.rdb
save 900 1
dir /data

2.触发 RDB 快照保存

如果没有save触发条件,也可以自己手动触发快照保存

linux环境

redis-cli SAVE

python环境

import redis  
  
# 连接到Redis服务器  
r = redis.Redis(host='localhost', port=6379, db=0)  

r.bgsave()  # 触发RDB快照的保存  

3.验证

这里我们设置了自动保存快照,并添加两个数据

image-20240703153544015

然后重启服务器,再次查询keys *,数据还在

image-20240703153722704

  • RDB优势
    • 二进制存储,速度极快磁盘空间占用小
    • 在生成RDB快照时,Redis会fork出一个子进程来负责写入磁盘工作,对性能的影响小
  • RDB劣势
    • 实时性低,需要等待save
    • 有数据丢失风险,如果在save存储间隔期间宕机则无法存储到那期间的数据
    • 数据过大时,fork过程会克隆一份数据,相当于内存中突然出现了两倍的数据,可能会影响性能

AOF示例

AOF 日志存储的是 Redis 服务器的顺序指令序列,AOF 日志只记录对内存进行修改的指令记录

1.配置文件

  • appendonly:是否开启AOF

  • appendfilename:AOF文件名。默认值为appendonly.aof

  • appendfsync:AOF持久化策略的配置。有三个选项:

    • no:不执行fsync,由操作系统保证数据同步到磁盘,速度最快,但不太安全。

    • always:每次写入都执行fsync,以保证数据同步到磁盘,效率很低。

    • everysec:每秒执行一次fsync,这是默认选项,兼顾了安全性和效率。但可能会导致最多丢失1秒的数据。

示例:

# 开启AOF持久化功能  
appendonly yes  
  
# AOF文件的名称  
appendfilename "appendonly.aof"  
  
# 配置AOF持久化的fsync策略  
# 使用everysec可以实现性能和数据安全性的平衡,每秒fsync一次  
appendfsync everysec  
  
# AOF文件自动重写的触发条件  
# 设置为100,表示当AOF文件大小是上一次重写后的AOF文件大小的100%时,触发重写  
auto-aof-rewrite-percentage 100  
  
# 设置触发AOF重写的最小文件大小  
# 避免AOF文件很小的时候触发重写,减少不必要的重写操作  
auto-aof-rewrite-min-size 64mb  
  
# 配置在启动加载AOF文件时对不完整文件的处理  
# 设置为yes,允许加载不完整的AOF文件,提高数据恢复的灵活性  
aof-load-truncated yes  
  
# 启用增量式fsync,减少磁盘I/O操作  
aof-rewrite-incremental-fsync yes  
  
# 在AOF重写期间,使用备用的子进程进行写操作,减少对主进程的影响  
# 注意: 在Redis 4.0及以上版本中,这通常是默认行为  
# aof-rewrite-use-rdb-preamble yes  # 根据Redis版本和具体需求选择是否启用混合持久化  
  
# 配置文件的目录,AOF文件会存储在这个目录下  
dir /data  

# 其他可能的配置项,根据实际需求进行配置  
# 例如,关于AOF重写期间是否禁止appendfsync  
# no-appendfsync-on-rewrite no

2.校验

随便搞点数据进去(set k '123'),然后打开appendonly.aof

image-20240703194914628

混合型持久化存储

混合持久化在AOF重写时,将压缩的RDB数据置于AOF文件首,后续追加AOF命令,以结合两者优势加速恢复并减少数据丢失风险

它继承了RDB和AOF优点:

  • 快速恢复(RDB)
  • 数据完整(AOF)

配置文件

首先启用 AOF 持久化,并设置 aof-use-rdb-preambleyes(Redis 5.0 及以上版本中默认启用)

appendonly yes  
aof-use-rdb-preamble yes

当 AOF 文件增长到一定大小时,Redis 会自动触发 AOF 重写过程。在重写过程中,Redis 会首先创建一个新的 AOF 文件,并将当前的内存快照(RDB 格式)以二进制压缩形式写入到这个新文件的开头

手动触发AOF重写

redis-cli BGREWRITEAOF

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

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

相关文章

Linux Rsyslog+LogAnalyzer+MariaDB部署日志服务器

文章目录 Linux RsyslogLogAnalyzerMariaDB部署日志服务器1 环境准备1.1 服务器端安装LAMP环境1.2 服务启动并加入开机启动1.2.1 Apache1.2.2 MariaDB1.2.3 Php 2 Rsyslog服务端安装及配置2.1 安装Rsyslog及Rsyslog连接MySQL的模块2.2 导入rsyslog-mysql数据库文件2.3 查看刚导…

vector与list的简单介绍

1. 标准库中的vector类的介绍: vector是表示大小可以变化的数组的序列容器。 就像数组一样,vector对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,并且与数组中的元素一样高效。但与数…

顶级5款有用的免费IntelliJ插件,提升你作为Java开发者的旅程

在本文中,我们将深入探讨IntelliJ IDEA插件——那些可以提升你生产力的神奇附加组件,并微调你的代码以达到卓越。我们将探索5款免费插件,旨在将你的开发水平提升到一个新的高度。 1. Test Data 使用Test Data插件进行上下文操作 作为开发者&a…

IT之旅启航:高考后IT专业预习全攻略

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…

yum命令提示 错误:rpmdb: BDB0113 Thread/process 4153/139708200269632

一、报错信息 [rootDawn yum.repos.d]# yum clean all 错误:rpmdb: BDB0113 Thread/process 4153/139708200269632 failed: BDB1507 Thread died in Berkeley DB library 错误:db5 错误(-30973) 来自 dbenv->failchk:BDB0087 DB_RUNRECOVE…

【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示

【AI】AI学习目录汇总 1、简介 deepstream-segmentation-test示例演示了图像的语义分割。两个配置文件,分别加载U-Net和Res-UNet两种分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一个在生物医学图像分割领域广泛应用的卷积神经网络(CNN),…

PHP花涧订购系统-计算机毕业设计源码00332

摘 要 近年来,电子商务的快速发展引起了行业和学术界的高度关注。花涧订购系统旨在为用户提供一个简单、高效、便捷的花卉购物体验,它不仅要求用户清晰地查看所需信息,而且还要求界面设计精美,使得功能与页面完美融合,…

Flume集群部署(手把手部署图文详细版)

前景概要: Kafka消息订阅系统在大数据业务中有着重要运用,尤其在实时业务中,kafka是必不可少的组件之一。 Flume是大数据组件中重要的数据采集工具,我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中&…

实践Go的命令模式

简介 现在的软件系统往往是分层设计。在业务层执行一次请求时,我们很清楚请求的上下文,包括,请求是做什么的、参数有哪些、请求的接收者是谁、返回值是怎样的。相反,基础设施层并不需要完全清楚业务上下文,它只需知道…

【软件测试】之黑盒测试用例的设计

🏀🏀🏀来都来了,不妨点个关注! 🎧🎧🎧博客主页:欢迎各位大佬! 文章目录 1.测试用例的概念2.测试用例的好处3. 黑盒测试用例的设计3.1 黑盒测试的概念3.2 基于需求进行测…

2024年洗地机哪款最好用?全网最全洗地机选购指南

随着科技的不断进步,人们对生活的品质的追求也逐渐上升,智能家用洗地机也逐渐成为人们家务活的得力助手。随之而来的,洗地机品牌繁多,质量参差不齐,往往让我们无从下手,作为洗地机的重度用户,防…

220千伏变电站辅助设备智能监控平台 无人化与自动化升级改造工程

220千伏变电站特点 高电压等级:220千伏变电站的最大特点是其高压传输能力,能够将发电厂产生的电能高效地传输到较远的地区,满足大型城市及工业区域的用电需求。 输电能力大:220千伏变电站在输电能力上远大于普通的110千伏或更低…

C语言中的自定义类型: 结构体、联合体和枚举

1.结构体类型 结构体是一些值的集合,这些值称为成员变量.结构体的每个成员可以是不同类型的变量. 1.1结构体类型的声明 上述的variable-list可以有也可以没有,有的意思是直接在这就创建了结构体变量,这里创建的变量可以直接初始化,如下面一段…

时空预测+特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比

时空预测特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比 目录 时空预测特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

经典递归分析

在前面一篇中, 已经看过许多直观的递归的例子, 在这篇里, 将分析两个经典的递归问题, 阶乘与菲波那契数列数列, 在此过程中, 还将对比递归与循环(迭代)间的异同, 探讨递归与内存中的栈的关系, 以及递归的效率等问题. 如无特别说明, 示例使用的是 Java, IDE 则为 Eclipse. 阶乘(…

js学习--制作猜数字

猜数字制作 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><script>function fun() {alert("1-100猜数字");let num Math.floor(Math.random() * 100) 1;for …

无法识别为 cmdlet、函数、脚本文件或可运行程序的名称

一、遇到问题 PS D:\software\nacos\nacos-server-2.3.1\bin> startup.cmd -m standalone startup.cmd : 无法将“startup.cmd”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c; 请确保路径正确&#xff0c;然后…

Kamailio-Web管理页面Siremis的安装与部署

siremis 是针对于 Kamailio 的web管理接口&#xff0c;使用PHP书写&#xff0c;更新至2020年&#xff0c;相对不是太新但是是官方友链的 以下就采用 Ubuntu 22.04Siremis 5.8.0apache http server 2.4php7.0 如有疑问请参看官方指南 以下开始介绍操作步骤 安装apache2.4 we…

【JavaEE】多线程代码案例(2)

&#x1f38f;&#x1f38f;&#x1f38f;个人主页&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;JavaEE专栏&#x1f38f;&#x1f38f;&#x1f38f; &#x1f38f;&#x1f38f;&#x1f38f;上一篇文章&#xff1a;多线程代码案例(1)&a…

【硬核科普】存算一体化系统(Processing-in-Memory, PIM)深入解析

文章目录 0. 前言1. 提出背景1.1 存储墙1.2 功耗墙 2. 架构方案2.1 核心特征2.2 技术实现2.2.1 电流模式2.2.2 电压模式2.2.3 模式选择 2.3 PIM方案优势 3. 应用场景4. 典型产品4.1 鸿图H304.2 三星HBM-PIM 5. 存算一体化缺点6. 总结 0. 前言 按照国际惯例&#xff0c;首先声明…