【Redis7】Redis持久化机制之RDB

文章目录

  • 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 ""
    • 修改配置文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python:pycharm虚拟解释器报错环境位置目录为空

目录 解释器分控制台解释器 和 pycharm解释器 控制台解释器切换: pycharm解释器 解释器分控制台解释器 和 pycharm解释器 控制台解释器切换: 切换到解释器下 激活解释器 查看解释器 where python 激活成功 这时在控制台使用python xxx.py 可以…

java面试框架篇(Spring常见问题、SpringBoot、SpringMVC、mybatis经典问题、SpringCloud组件)

文章目录 面试专题-java框架篇1. spring常见问题1.1. spring是什么?1.2. 谈谈你对AOP的理解1.3. 谈谈你对IOC的理解1.4. Spring Boot、 Spring MVC和Spring有什么区别1.5. spring bean 生命周期1.6. spring事务传播机制有哪些?1.7. 循环依赖1.8. spring框架中使用了哪些设计模…

在链游中,智能合约如何被用于实现游戏内的各种功能

随着区块链技术的快速发展,链游(Blockchain Games)作为区块链技术的重要应用领域之一,正逐渐展现出其独特的魅力和优势。其中,智能合约作为链游的核心技术之一,对于实现游戏内的各种功能起到了至关重要的作…

k8s的网路配置

目录 1、k8s相关网络类型 1.1 K8S中Pod网络通信 1.2 Overlay Network 1.3 VXLAN 1.3.1 vlan和vxlan的区别 2、Flannel 2.1 简介 2.2 Flannel工作原理 2.3 ETCD之Flannel提供说明 2.4 Flannel部署 2.4.1 在node节点上操作 2.4.2 在master01节点上操作 2.4.2.1 安装f…

LangChain llamaindex

LangChain 参考: 全流程 | Windows 系统本地部署开源模型阿里通义千问 QWEN 1.5,结合 LangChain-Chatchat 框架和向量数据库 FAISS、Milvus - 知乎

MySQL 插入数据的时候自动忽略重复数据

MySQL中插入数据,如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert into语法的时候,如果遇到重复数据,会直接报错,导致事务回滚,所有插入数据,全部失败。…

Go语言直接使用Windows的IOCP API写一个echo服务器

Go的标准库中Windows下的网络是使用了IOCP的,参见go源码go/src/runtime/netpoll_windows.go,标准库为了与Epoll、kqueue等不同平台的IO模式使用统一的API,进行了封装。 如果想直接使用Windows的IOCP API编程,比如想按照&#xff…

iOS swift5 提示信息显示,提示弹框,第三方框架XHToastSwift

文章目录 1.github地址(亲测好用)2.源代码 1.github地址(亲测好用) XHToastSwift - github 2.源代码 XHToast.swift // // XHToast.swift // XHToastSwiftExample // // Created by xiaohui on 16/8/12. // Copyright © 2016年 CoderZhuXH. All rights reserved. …

x264 码率控制原理:rate_estimate_qscale 函数

rate_estimate_qscale 函数 原理 函数功能:根据目前使用的实际比特数更新一帧的qscale;是一个复杂的决策过程,需要考虑多种因素,如帧类型、编码的复杂度、目标比特率、缓冲区大小等,以确保视频质量和文件大小之间的平衡。函数参数分析:x264_t *h :编码器上下文信息结构…

鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

代码工程及构建介绍 背景 ArkUI作为OpenHarmony的默认开发框架,在本项目(ArkUI-X)中需要做到一套代码同时支持多平台构建,所以会采取共仓开发的方式,部分仓直接指向OpenHarmony相关开源仓。 代码结构及仓库结构 代…

基于YOLO系列算法(YOLOv5、YOLOv6、YOLOv8以及YOLOv9)和Streamlit框架的行人头盔检测系统

摘要 本文基于最新的基于深度学习的目标检测算法 (YOLOv5、YOLOv6、YOLOv8)以及YOLOv9) 对头盔数据集进行训练与验证,得到了最好的模型权重文件。使用Streamlit框架来搭建交互式Web应用界面,可以在网页端实现模型对图像、视频和实时摄像头的目标检测功能…

C语言-atoi()库函数的模拟实现

文章目录 前言一、atoi()库函数的介绍及使用1.1 atoi()库函数介绍1.2 atoi()库函数使用 二、atoi()库函数的模拟实现2.1 函数设计2.2 函数实现思路2.3 具体实现2.4 测试 总结 前言 本篇文章介绍c语言中库函数atoi()的使用,以及模拟实现库函数。 一、atoi()库函数的…

【linux】详解linux权限

目录 用户 文件属性 更改文件权限 更改文件拥有者 更改文件所属组 用户的权限 文件掩码 粘滞位 总结 基本指令可参考: 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 用户 超级用户(root)&#xff…

Redis篇 在linux系统上安装Redis

安装Redis 在Ubuntu上安装Redis 在Ubuntu上安装Redis 在linux系统中,我们安装Redis,必须先使它有root权限. 那么在linux中,如何切换到root用户权限呢? sudo su 就可切换到用户权限了. 在切换到用户权限后,我们需要用一条命令来搜索Redis相关的软件包 apt search redis 会出现非…

怎样下载Android Studio历史版本文件包

1.在官网上下载都是推荐最新版本,想下载历史版本比较费劲,绕来绕去的。 2.进入这个网站可以下载其他版本https://android-studio.en.uptodown.com/windows/versions Older versions of Android Studio Its not uncommon for the latest version of an a…

解耦:哪些方法可以用来解耦代码

目录 1.引用 2.为何解耦如此重要 3.如何判断代码是否需要解耦 4.如何给代码解耦 5.思考题 1.引用 前面我们曾经讲到,重构可以分为大型重构和小型重构。小型重构的主要目的是提高代码的可读性,大型重构的主要目的是解耦。本节讲解如何对代码进行解耦…

webgl three 模型操作

模型位置操作是改变相关属性 平移改变位置 缩放改变缩放值 旋转改变角度 webgl中是4x4矩阵 前三排是原始状态 第四排是改变值 .position 位置 .scale 缩放 .rotation 绕轴旋转 .quaternion 绕axis旋转 其实和svg差不多 缩放 缩放是操作对角线 // Matrix4x4 …

大语言模型的工程技巧(三)——分布式计算

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文将讨论如何利用多台机器进行神经网络的分布式训练。利用多台机器来加速大语言模型的训练,是其获得成功的重要原…

操作系统总结3

目录 2.3.3 进程互斥的硬件的实现方法 (1)知识总览 (2)中断的屏蔽方法 (3)TestAndSet指令 (4)Swap指令 总结 2.3.4 信号量机制 (1)知识总览 &#x…

《web应用设计》第八次作业

我的小组长是姚若希,我们组课程设计的题目是:学生管理系统 ,我认领的功能模块是:课程管理 2.查询并分页