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

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.mzph.cn/bicheng/40039.shtml

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

相关文章

乘积最大子数组

代码实现&#xff1a; 方法一&#xff1a;暴力法 方法二&#xff1a;动态规划 int maxProduct(int *nums, int numsSize) {long imax nums[0], imin nums[0], res nums[0];for (int i 1; i < numsSize; i) {if (nums[i] < 0) {int temp imax;imax imin;imin temp;…

自动生成网站sitemap

要在 Next.js 和 Contentlayer 项目中实现自动生成 Sitemap 的功能&#xff0c;你可以编写一个脚本&#xff0c;在每次生成文档后自动生成 Sitemap。以下是一个示例脚本&#xff0c;你可以根据自己的需求进行调整。 步骤 1&#xff1a;安装必要的依赖 首先&#xff0c;你需要…

【加密与解密】【08】Java加密算法详解

文章目录 Java加密库摘要算法MD5代码实现SHA256代码实现HmacMD5代码实现CRC32代码实现对称加密算法查看JDK支持的算法Base64代码实现DES代码实现DESede代码实现AES代码实现RC代码实现IDEA代码实现PBE代码实现非对称加密算法DH秘钥交换算法数学原理DH算法代码实现RSA算法代码实现…

【python全栈系列】day03-python数据类型-Number

python3中有六个标准的数据类型:Number&#xff08;数字&#xff09;String&#xff08;字符串&#xff09;List&#xff08;列表&#xff09; Tuple&#xff08;元组&#xff09; Set&#xff08;集合&#xff09;Dictionary&#xff08;字典&#xff09; 下面我们就用几天的…

学会python——用python编写一个电子时钟(python实例十七)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.电子时钟程序 3.1 代码构思 3.2代码实例 3.3运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性…

thinkphp8 执行 db:: 需要引入什么

在ThinkPHP8中&#xff0c;执行数据库操作需要使用Db类。为了执行Db::静态调用&#xff0c;您需要引入think\facade\Db类。 在您的控制器或模型文件顶部&#xff0c;使用以下代码引入Db类&#xff1a; use think\facade\Db; 然后您就可以使用Db类来执行数据库操作&#xff0c;…

【Python】从Word文档中提取表格的方法

在Python中&#xff0c;从Word文档&#xff08;通常是.doc或.docx格式&#xff09;中提取表格可以使用第三方库&#xff0c;如python-docx。以下是使用python-docx库从Word文档中提取表格的基本步骤&#xff1a; 安装python-docx库&#xff1a; 如果你还没有安装这个库&#xf…

今天的A股,让人惊愕了,2个耐人寻味的重要信号,有望迎来下一个超级风口!

今天的A股&#xff0c;让人惊愕了&#xff0c;你知道是为什么吗&#xff1f;盘面上出现2个耐人寻味的重要信号&#xff0c;有望迎来下一个超级风口&#xff01; 1、今天两市低开低走&#xff0c;但大消费劲头十足&#xff0c;连中免这样的大体量都涨停了&#xff0c;另外消费茅…

爬虫-网页基础

HTML 基本语法 HTML&#xff1a;Hyper Text Markup Language, 超文本标记语言&#xff0c;是计算机语言的一种&#xff0c;由元素构成。 p元素 <p>Web 真好玩&#xff01;</p> 由三大部分组成 开始标签&#xff1a;一对尖括号中间包裹这元素名称元素内容&#x…

SaaS运营:如何根据“客户漏斗”定制合作伙伴营销策略?

将你的合作伙伴营销策略与你的客户漏斗模型相结合&#xff0c;可以显著提升你的营销效果。通过瞄准客户旅程中的每一个阶段&#xff0c;你可以增加客户参与度并推动转化&#xff0c;从而将你的促销活动提升到新的高度——这仅仅是一个以数据为支撑的方法。 为了探讨如何在漏斗…

数据结构 - C/C++ - 树

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 树的概念 结构特性 树的样式 树的存储 树的遍历 节点增删 二叉搜索树 平衡二叉树 树的概念 二叉树是树形结构&#xff0c;是一种非线性结构。 非线性结构&#xff1a;在二叉树中&#x…

Echarts热力图关闭初始化时动画效果(由左至右渐进加载动画)

Echarts热力图关闭初始化时动画效果&#xff08;由左至右渐进加载动画&#xff09; 在Echarts配置中&#xff0c;热力图初始时加载数据会有由左向右的渐进的加载动画。无论是在option或在series添加均不生效&#xff0c;但是在折线图会生效。 animation animationDuration ani…

C/C++ 编程语言详解

前言 C 和 C 是两种功能强大且广泛使用的编程语言。C 语言因其高效、灵活和接近硬件的特性&#xff0c;在系统编程、嵌入式系统和高性能计算中占据重要地位。C 则在 C 的基础上增加了面向对象编程特性&#xff0c;广泛应用于软件开发、游戏编程和大型系统设计。本文将详细介绍…

LLM应用:传统NLP任务

LLM出来以后&#xff0c;知乎上就出现了“传统NLP已死”的言论&#xff0c;但是传统NLP真的就被扔进历史的垃圾桶了吗&#xff1f; 其实&#xff0c;尽管LLM具有出色的通用能力&#xff0c;但仍然无法有效应对低资源领域的自然语言处理任务&#xff0c;如小语种翻译。为了更好地…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架&#xff0c;它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能&#xff0c;Gin成为Go语言中最受欢迎的Web框架之一。 特点&#xff1a; 快速和轻量&#xff1a;Gin框架的设计注重性能和效率&#xff0c;采用了一些优化措…

quartz调度框架和gbase8s适配过程中的四个报错

1.报错Caused by: java,sql.SOLException Create breakpoint . : 发生语法错误。 程序与数据库通过jdbc连接时&#xff0c;为了保持连接&#xff0c;会向数据库发送sql语句验证连接有效 --如mysql的其他数据库 connection-test-query: "select 1;" --gbase8s数据库…

第二十一章 网络编程

​ 一、网络的相关概念 1. 网络通信 &#xff08;1&#xff09;网络通信&#xff1a;将 数据 通过网络从一台设备传输到另一台设备 &#xff08;2&#xff09;java.net 包下提供了一系列的类或接口&#xff0c;完成网络通信 2. 网络 概念&#xff1a;两台或多台设备通过一定…

轻松省电!教你苹果手机自动调节亮度怎么设置

在日常使用手机的过程中&#xff0c;屏幕亮度是影响电池续航的关键因素之一。苹果手机提供的自动调节亮度功能&#xff0c;可以根据环境光线自动调整屏幕亮度&#xff0c;从而提供最佳的视觉体验并有效延长电池使用时间。想知道苹果手机自动调节亮度怎么设置吗&#xff1f; 本…

工厂自动化相关设备工业一体机起到什么作用?

在当今的制造业领域&#xff0c;工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中&#xff0c;工业一体机作为一种重要的设备&#xff0c;发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…

02:vim的使用和权限管控

vim的使用 1、vim基础使用1.1、vim pathname 2、vim高级用法2.1、查找2.2、设置显示行号2.3、快速切换行2.4、 行删除2.5、行复制粘贴 3、权限管理3.1、普通用户和特权用户3.2、文件权限表示 vim是Linux中的一种编辑器&#xff0c;类似于window中的记事本&#xff0c;可以对创建…