【Redis7】Redis持久化机制之RDB

news2024/10/6 6:04:12

文章目录

  • 1.RDB简介
  • 2.RDB配置触发设置
  • 3.RDB的优缺点
  • 4.如何检查修复RDB文件
  • 5.如何禁用RDB
  • 6.RDB参数优化
  • 7.总结

1.RDB简介

Redis持久化机制中的RDB(Redis Database)是一种将Redis在某个时间点的数据以快照形式保存到磁盘上的方法。

原理:RDB通过创建一个包含Redis数据库所有键值对的快照文件(通常以.rdb作为文件后缀)来实现持久化。这个过程将内存中的数据以二进制格式转储到磁盘上,形成一个紧凑的文件,便于备份和迁移。

三种触发方式配置触发,手动触发和后台触发

  • 手动触发:通过执行SAVE命令可以立即执行一次快照生成,但需要注意,该命令会阻塞Redis服务器,直到RDB文件创建完毕,因此在生产环境中不推荐直接使用
  • 后台触发:使用BGSAVE命令可以在后台异步执行快照生成,不会阻塞服务器处理客户端请求。
  • 配置触发:Redis服务器可以根据配置文件中的策略自动执行快照,如设置save指令来定义在一定时间内发生指定数量的写操作后自动执行BGSAVE。

2.RDB配置触发设置

配置触发:Redis服务器可以根据配置文件中的策略自动执行快照,如设置save指令来定义在一定时间内发生指定数量的写操作后自动执行BGSAVE。

RDB的配置通常在Redis的配置文件redis.conf中进行,包括RDB文件的保存路径、自动保存的规则等。

Redis6.2之前,RDB的配置如下:

image-20240518215807256

在 Redis.conf 配置文件中的 SNAPSHOTTING 下配置 save 参数,来触发 Redis 的 RDB 持久化条件,比如“save m n”:表示 m 秒内数据集存在 n次修改时,自动触发 bgsave

  • save 900 1:每隔 900s(15min),如果有超过 1 个 key 发生了变化,就写一份新的 RDB 文件
  • save 300 10:每隔 300s(5min),如果有超过 10 个 key 发生了变化,就写一份新的 RDB 文件
  • save 60 10000:每隔 60s(1min),如果有超过 10000 个 key 发生了变化,就写一份新的 RDB 文件

以下是Redis7中对RDB的配置内容:

image-20240518215927145

  • save 3600 1:每隔 3600s(60min),如果有超过 1 个 key 发生了变化,就写一份新的 RDB 文件
  • save 300 100:每隔 300s(5min),如果有超过 100 个 key 发生了变化,就写一份新的 RDB 文件
  • save 60 10000:每隔 60s(1min),如果有超过 10000 个 key 发生了变化,就写一份新的 RDB 文件

接下来通过修改配置文件,才修改自动保存规则,步骤如下:

1.修改自动保存规则,10秒内2个key发生变化
在这里插入图片描述

2.创建rdb文件存放的文件夹
在这里插入图片描述

3.修改redis配置文件, 505行左右
在这里插入图片描述

4.修改rdb文件的名字,默认是dump.rdb
在这里插入图片描述

我这里修改成了dump+端口号的形式,也可以不修改
在这里插入图片描述

改完配置文件要重启redis服务

5.连接redis,进行测试

使用命令config get dir,测试配置是否生效

127.0.0.1:6379> config get dir
1) "dir"
2) "/redis-config/rdbfiles"
127.0.0.1:6379> 

这里会显示修改rdb文件存放的文件夹,我这里是没问题的

只需要在redis中让key10秒内修改两次即可,修改完成之后查看文件夹,可以看到多了一个.rdb文件
在这里插入图片描述

示例:

修改原本生成的.rdb文件名称
在这里插入图片描述

清空所有的key
在这里插入图片描述
可以看到又生成了一个.rdb文件
在这里插入图片描述

  • flushdb这种命令也会生成.rdb文件,但是这个文件毫无意义

使用原来的.rdb文件,观察是否能恢复数据

首先先将原来的.rdb文件删除.然后重启虚拟机,重启虚拟机之后,会再生成一个.rdb文件 在将这个.rdb文件删除,将原来有数据的.rdb文件名改回去
在这里插入图片描述
重连redis服务,可以看到数据恢复了
在这里插入图片描述

3.RDB的优缺点

  • 优点:RDB文件紧凑,恢复速度比AOF快;适合做灾难恢复;对数据完整性要求不高的场景下非常有用。
  • 缺点
    • 数据恢复点取决于最后一次快照,如果服务器故障发生在两次快照之间(也就是一次快照之后,又修改了数据,但是还没触发快照),这段时间的数据会丢失;频繁执行快照可能会影响性能。
    • 内存数据的全量同步,如果数据量太大会导致I/0严重影响服务器性能
    • RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟fork的时候内存中的数据被克隆了一份,大致2倍的膨胀性,需要考虑

4.如何检查修复RDB文件

RDB在备份的时候,是有可能出现文件破损的.例如:RDB在进行文件写入的时候,写了一半,服务器突然宕机了,那么这条数据就有问题,从而到底整个文件都读不出来.

那么如何检查修复RDB文件呢?

1.其实在/usr/local/bin/目录下有一个redis-check-rdb
在这里插入图片描述

2.因此在任何地方使用redis-check-rdb 命令即可完成检查修复
在这里插入图片描述

5.如何禁用RDB

方法有两种:

  1. 动态所有停止RDB保存规则的方法:redis-cli config set save ""
  2. 修改配置文件,禁用快照
    在这里插入图片描述

6.RDB参数优化

1.stop-writes-on-bgsave-error:控制当Redis在执行后台保存(background save,简称bgsave)操作生成RDB快照文件时的行为。

默认yes.意思是那么当Redis在创建RDB快照过程中遇到错误(例如磁盘空间不足、权限问题等),Redis将停止接受任何可能修改数据集的命令,以防止数据不一致的情况发生。

如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制这种不一致,那么在快照写入失败时也能确保redis继续接受新的写请求
在这里插入图片描述

2.rdbcompression:用于控制Redis在生成RDB(Redis Database)快照文件时是否对数据进行压缩。

默认是yes,意思是Redis会在保存数据到RDB文件之前对其进行压缩。这样做的主要目的是减少RDB文件的体积,从而节省存储空间并可能加快备份和恢复过程中的传输速度。

压缩过程通常使用LZF算法,这是一种相对快速且高效的压缩算法,能够在压缩数据大小与CPU消耗之间取得一个平衡。尽管压缩会增加一定的CPU使用率,但对于大多数场景来说,这一开销相对于节约的存储空间和提高的I/O效率来说是可接受的。
在这里插入图片描述

3.rdbchecksum:用于控制Redis在载入RDB(Redis Database)快照文件时是否进行数据校验。

默认是yes,意思是Redis在从RDB文件恢复数据到内存之前,会计算快照文件内的数据校验和(checksum),然后与RDB文件末尾存储的校验和进行对比,以确保数据的完整性。
在这里插入图片描述

4.rdb-del-sync-files:控制着在主从复制(replication)场景下,从节点(slave)对于用于同步的RDB文件的处理方式。

默认是no,意思是即使从节点没有开启任何持久化(既没有启用RDB持久化也没有启用AOF持久化),在主从全量同步过程中使用的RDB文件也不会被自动删除。
在这里插入图片描述

7.总结

  1. RDB是一种将Redis在某个时间点的数据以快照形式保存到磁盘上的方法,主要是依靠rdb文件。

  2. 触发RDB情况: 达到配置的频率和时间,save, bgsave, shutdown , flushall/flushdb

    • save不建议使用
    • flushall/flushdb:产生的rdb文件没有意义
  3. 使用redis-check-rdb 命令即可完成检查修复rdb文件

  4. 禁用RDB:

    • 使用命令redis-cli config set save ""
    • 修改配置文件

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

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

相关文章

期货交易的雷区

一、做自己看不懂的行情做交易计划一样要做有把握的,倘若你在盘中找机会交易,做自己看不懂的行情,即便你做进去了,建仓时也不会那么肯定,自然而然持仓也不自信,有点盈利就想平仓,亏损又想扛单。…

Go 和 Delphi 定义可变参数函数的对比

使用可变参数函数具有灵活性、重用性、简化调用等优点,各个语言有各自定义可变参数函数的方法,也有通用的处理方法,比如使用数组、定义参数结构体、使用泛型等。 这里总结记录一下 go、delphi 的常用的定义可变参数函数的方式! 一…

句柄降权绕过CallBacks检查

看到前辈们相关的文章,不太明白什么是句柄降权,于是专门去学习一下,过程有一点波折。 句柄降权 什么是句柄 当一个进程利用名称来创建或打开一个对象时,将获得一个句柄,该句柄指向所创建或打开的对象。以后&#xf…

前端自动将 HTTP 请求升级为 HTTPS 请求

前端将HTTP请求升级为HTTPS请求有两种方式&#xff1a; 一、index.html 中插入meta 直接在首页 index.html 的 head 中加入一条 meta 即可&#xff0c;如下所示&#xff1a; <meta http-equiv"Content-Security-Policy" content"upgrade-insecure-requests&…

metaMIC:无参考错误组装识别和校正宏基因组组装

#环境很重要&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; conda create -n metaMIC conda activate metaMIC mamba install python3.8 mamba install -c …

redis核心面试题二(实战优化)

文章目录 10. redis配置mysql实战优化[重要]11. redis之缓存击穿、缓存穿透、缓存雪崩12. redis实现分布式session 10. redis配置mysql实战优化[重要] // 最初实现OverrideTransactionalpublic Product createProduct(Product product) {productRepo.saveAndFlush(product);je…

变量命名的艺术:从蛇形到驼峰

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、蛇形命名法的魅力 二、类名和模块名的特殊规则 三、驼峰命名法的魅力与挑战 四、保持…

FFmpeg操作命令 - 精简版

PS&#xff1a;&#xff08;因为我只需要简单的操作&#xff0c;所以我整理出了这份笔记&#xff09; 原网址&#xff1a;30分钟带你入门&#xff0c;20个 FFmpeg操作命令&#xff0c;包你学会 - 知乎 大佬零声Github整理库整理的笔记非常的全面&#xff0c;想看完整版去上面…

MySQL主从复制(五):读写分离

一主多从架构主要应用场景&#xff1a;读写分离。读写分离的主要目标是分摊主库的压力。 读写分离架构 读写分离架构一 架构一结构图&#xff1a; 这种结构模式下&#xff0c;一般会把数据库的连接信息放在客户端的连接层&#xff0c;由客户端主动做负载均衡。也就是说由客户…

ROS | Gmapping进行Slam建图

launch文件 GMapping参数设置&#xff1a; 修改参数&#xff1a;

笔记 | 《css权威指南》

网络安全色 URL text-indent line-height & vertical-align 字体 font-weight 400 normal 700 bold background-attachment

【C++】c++入门(下 )

c入门 1.内联函数1.1 概念1.2 特性 2.auto关键字(C11)2.1 简介2.2 auto的使用2.3 auto不能推导的场景2.4 typedef取别名也能产生和auto的效果&#xff0c;为什么不使用&#xff1f; 3.基于范围的for循环(C11)3.1 9.1 范围for的语法3.2 范围for的使用条件 4.指针空值nullptr(C11…

寻找峰值 ---- 二分查找

题目链接 题目: 分析: 因为题目中要找的是任意一个峰值即可, 所以和<山脉数组的峰值索引>这道题差不多因为峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果nums[mid] < nums[mid 1], mid一定不是峰值, 所以left mid 1如果nums[mid] &…

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型 前言 今天来写一个简单的ernie-c#的例子&#xff0c;主要参考了百度智能云的例子&#xff0c;然后自己改了改&#xff0c;学习了ERNIE模型的鉴权方式&#xff0c;数据流的格式和简单的数据解析&#xff0c;实…

电商平台的消费增值模式革新

在当今的电商市场&#xff0c;用户留存和粘性是各大平台竞相追求的目标。而消费增值模式&#xff0c;以其独特的激励机制&#xff0c;正逐渐成为电商平台吸引和留住用户的新策略。 一、消费即投资&#xff1a;创新的返利机制 在传统的电商消费中&#xff0c;消费者完成交易后&…

基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数

1 基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数 文章目录 1 基于QEMU-aarch64学习UEFI(EDK2)-7Print打印函数1.1 Print打印函数输出字符串1.2 Print打印函数其他用法程序开发我们以 edk2-stable202302版本为准。 1.1 Print打印函数输出字符串 我们把edk2/MdeModulePkg/App…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

springboot 两个相同类型的Bean使用@Resouce加载

问题描述 有两个相同类型的Bean 使用Service等注解注入或者Bean注入启动以后报错&#xff1a; qualifying bean of type com.fasterxml.jackson.databind.ObjectMapper available: expected single matching bean but found 2提示有相同的类型两个。 解决 * 每个Bean Resour…

AI预测福彩3D采取888=3策略+杀断组+杀和尾缩水测试5月24日预测第1弹

哈喽&#xff0c;各位亲爱的小伙伴&#xff0c;在发布本期预测结果之前&#xff0c;先对最近的这套算法测试做一下总结。 最近的一套算法采用了88723的容差策略&#xff0c;关于容差策略相信大家都比较清楚&#xff1a;容差可以最大限度的保证初始大底中包含中奖号码&#xff0…

「网络流浅谈」网络流的概念

更好的阅读体验 通常做题思路&#xff1a;问题转化为流网络&#xff0c;再通过最大流 / 最小割 / 费用流与问题之间的数量关系&#xff0c;求解出原问题。 网络流于其他算法不同&#xff0c;概念定理需要熟记于心&#xff0c;否则后面做题会有很大的障碍。 1. 流网络 一个流…