百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis教程——持久化(RDB)(redis持久化的几种方式,优缺点是什么,怎么实现的)

mhr18 2025-07-27 22:09 2 浏览 0 评论

RDB

在Redis数据库中RDB持久性以指定的时间间隔执行数据集的时间点快照,就是把某一时刻的数据和状态以RDB文件的形式写到磁盘上。这样一来即使故障宕机,快照文件也不会丢失,当故障恢复时,再将硬盘快照文件直接读到内存,这样数据的可靠性也就得到了保证。

如下图所示:

编辑

「优势:」

在使用RDB备份时,Redis父进程实现持久化工作只需要派生一个将完成所有其余工作的子进程即可,这样父进程不需要执行磁盘I/O或类似操作,从而最大限度提高Redis性能。

RDB主要用于大规模的数据恢复、需要定时备份、对数据完整性和一致性要求不高的情况下。

「劣势:」

  • 当Redis突然停止工作后,未进行快照备份的数据会导致丢失;
  • 内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能;
  • RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟,fork的时候内存中的数据被克隆一份,导致2倍的膨胀性。

配置RDB

配置RDB需要进入redis.conf配置文件,找到SNAPSHOTTING,如下图所示:

编辑

如上图所示,在Redis6.2及Redis-7.0.0默认有如下其中一种情况满足时,执行快照写一份新的RDB文件:

  • 1小时内超过1次数据变化;
  • 5分钟内超过100次数据变化;
  • 1分钟内超过1万次数据变化;

注意:在Redis6.0.16版本以下,默认有如下其中一种情况满足时,执行快照写一份新的RDB文件,

  • 15分钟内超过1次数据发生变化;
  • 5分钟内超过10次数据发生变化;
  • 1分钟内超过1万次数据发生变化;

快照的RDB文件默认的文件名和保存路径如下所示:

编辑

在redis.conf配置文件中,还可以设置如下RDB配置:

stop-writes-on-bgsave-error yes  # 设置为no时,生成RDB文件时出现错误,Redis仍然会继续写入新请求
rdbcompression yes       # 默认为yes,表示对于存储到磁盘中的快照,redis采用LZF算法进行压缩
rdbchecksum yes   # 默认为yes,表示在存储快照后,使用CRC64算法来进行数据校验,但这样会增加10%的性能消耗
rdb-del-sync-files no   # 默认为no,在没有持久性的情况下,禁用删除复制中使用的RDB文件启用

案例

简单了解了RDB快照的一些配置后,我们来做一个小案例,案例需求:10秒内超过2次修改时执行快照,修改快照生成的RDB文件名为dump123.rdb,保存路径为/myRedis/dumpfiles。

进入Redis.conf配置文件,写入如下代码实现10秒内超过2次修改时执行快照,

save 10 2

如下图所示:

编辑

在Redis.conf文件中修改dbfilename和dir代码为:

dbfilename dump123.rdb
dir /myRedis/dumpfiles

如下图所示:

编辑

注意:文件保存的路径必须存在。

/myRedis/dumpfiles不存在时,我们可以执行如下代码创建dumpfiles文件夹:

mkdir /myRedis/dumpfiles

修改完Redis.conf配置文件后,最好执行如下代码重启redis服务,

redis-cli -a 123456 shutdown  # 关闭redis服务,其中123456为我的redis登录密码
redis-server /myRedis/redis7.conf # 启动redis服务器

我这里的Redis配置文件路径为/myRedis/redis7.conf,大家要根据自己的Redis配置文件路径重启redis服务。

重启后,进入redis,执行如下代码即可看到检查rdb文件保存路径是否被修改为/myRedis/dumpfiles:

redis-cli -a 123456   # 启动redis客户端
config get dir    # 查看保存路径

如下图所示:

编辑

刚开始前,我们Redis数据库里是空的,在十秒内添加了两个数据后,在dumpfiles文件夹中生成了名为dump123的rdb文件,如下图所示:

编辑

注意:当十秒内只有一个数据发生变化,十秒后又有一个数据发生变化时,也会执行快照,如下图所示:

编辑

编辑

简单来说,每有两次数据发生变化,就会执行快照。

那可能有人问,那十秒的时间间隔不就没意义了吗,只要设置数据变化频率,频率满足条件就执行快照不就行了吗。

设置时间间隔的意义在于,即使十秒内有一万次数据发生变动,也只执行一次快照。

当宕机重启Redis时,就会读取快照文件内容从而恢复数据,所以不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储以防生产机物流损坏后备份文件也挂掉。

手动触发

上面的案例中,当某个条件满足时,自动触发执行快照,假设有个重要的数据发生变化,需要及时执行快照备份,但还没满足触发条件时,这时就需要手动触发执行快照。

Redis提供了save和bgsave命令来手动触发快照生成RDB文件,其中:

  • save:执行save会阻塞当前Redis服务器,不能处理其他命令,直到快照备份完成;
  • bgsave:执行bgsave,Redis会在后台异步进行快照操作,不阻塞快照同时还可以响应客户端请求。

其示例代码如下图所示:

编辑

注意:尽量使用bgsave来执行快照生成RDB文件。

除了配置文件中默认的快照配置和手动命令save/bgsave命令会触发RDB快照,以下情况也会触发RDB快照,

  • 执行flushall/flushdb命令也会产生RDB文件,但里面的内容是空白;
  • 执行shutdown且没有设置开启AOF持久化;
  • 主从复制时,主节点自动触发;

禁用快照

禁用快照主要有两种方式:命令方式禁用和配置文件配置禁用。

命令方式禁用

执行如下命令动态停止所有RDB保存规则的方法:

config set save ""

如下图所示:

编辑

这样就不会触发执行快照了。当重启了Redis服务时,快照会重新生效。

配置文件禁用快照

用命令方式禁用快照时,当Redis服务重启时,数据变动时,还是会执行快照,当我们想永久不使用快照时,在配置文件中的save设置为空字符,并在
stop-writes-on-bgsave-error设置为no,这样即使生成 RDB 文件时出现错误,Redis 仍然会继续写入。

编辑

这样设置后,当重启redis服务后,数据变动不会触发生成快照。

好了,Redis教程——持久化(RDB)就讲到这里了,下篇文章我们学习Redis教程——持久化(AOF)。

相关推荐

风险突出的高危端口汇总 一网打尽 !

高危端口一直是攻击者关注的焦点,了解这些端口的风险、攻击方式及防护策略至关重要。一、文件传输类端口1.TCP20/21:FTP服务端口FTP(文件传输协议)用于文件的上传和下载。其明文传输特性使得...

9. Redis Operator (2) —— Sentinel部署

0.简介上一篇,我们借由Redis的单机部署,学习了一下Operator的基本使用,今天,我们在此基础上,部署一下Redis的Sentinel模式。Sentinel本质上是为了解...

Spring Boot3 整合 Redis 后解决缓存穿透问题全解析

在当今互联网软件开发领域,构建高效、稳定的应用系统是每个开发者的追求。对于从事互联网软件开发的人员来说,SpringBoot和Redis都是极为常用的技术工具。当在SpringBoot3...

Spring Boot3 整合 Redis 后解决缓存雪崩问题全解析

在当今互联网软件开发领域,高并发、高性能的系统需求日益增长。对于从事互联网软件开发的人员来说,构建高效的缓存机制至关重要。SpringBoot3作为一款流行的Java框架,与Redis这一...

Sa-Token 多账号体系下Redis持久化问题

在使用Sa-Token框架实现多账号体系时,当后端服务重启后,系统报错"未能获取对应StpLogic,type=XXX"。这种情况通常发生在配置了Redis持久化存储的场景下...

外贸独立站缓存迷惑行为:你的Redis可能正在制造更多问题!

上周帮一个深圳卖家排查网站卡顿,发现他们用Redis缓存了整站HTML——"你们这是把缓存当备份用呢?"结果每次更新产品都要手动清空缓存,编辑小哥差点辞职...最近对象缓存圈两大魔教...

别再用top和htop了,这几款终端神器让你的服务器状态一目了然

当top命令成为性能瓶颈:一个深夜运维的真实困境凌晨三点,服务器告警短信突然炸响。老王盯着屏幕上top命令的黑白界面,CPU使用率飙升到90%却找不到具体进程,内存占用数据分散在不同列,磁盘I/O更是...

Redis学习笔记:管道(Pipelining)技术详解(第三章)

在掌握了Redis的基础命令后,如何进一步提升批量操作的效率?管道(Pipelining)技术是解决这一问题的关键。本章将深入解析管道的工作原理、使用场景及与其他技术的对比,帮助你在高并发场景下优化R...

Redis8.0有哪些新特性(redis最新特性)

Redis8.0引入了多项新特性和功能增强,以下是其中的一些亮点:1、数据结构:向量集合(VectorSet):这是一种新的数据类型,专为向量相似性搜索设计。它基于有序集(sortedset)...

Netty 的对象池(netty objectdecoder)

Netty是一个高性能的网络通信框架,广泛用于构建高并发、低延迟的TCP/UDP服务。为了提升性能,Netty内部大量使用了对象池(ObjectPool)技术来减少频繁创建和销毁对象带来的...

Redis学习笔记:核心命令与数据类型操作指南(第二章)

上一章我们梳理了Redis的核心应用场景与选型逻辑,本章将聚焦Redis的命令体系,从键操作到各数据类型的核心命令,帮你快速掌握Redis的"操作语法"。一、键(Key)命令:Redi...

Redis面试核心考点总结(覆盖 90% 的 Redis 面试场景)

一、基础核心数据类型与适用场景String:缓存、计数器(INCR)、分布式锁(SETNX)Hash:存储对象(用户信息、商品属性)List:消息队列(LPUSH/BRPOP)、时间线Set:标...

Redis ListPack有哪些具体应用场景?

Redis的Listpack是一种紧凑的数据结构,适用于存储少量数据。它被设计为ziplist的一种改进版本,旨在解决ziplist中存在的连锁更新问题,并提供更高效的内存使用和访问速度。以下是Lis...

SpringBoot实现单点登录(SSO)的4种方案

单点登录(SingleSign-On,SSO)是企业应用系统中常见的用户认证方案,它允许用户使用一组凭证访问多个相关但独立的系统,无需重复登录。对于拥有多个应用的企业来说,SSO可以显著提升用户体验...

刚刚,给学妹普及了登录的两大绝学

今天跟大家聊一个比较基础的话题,就是实现登录的方式有哪些?适合刚入行的朋友。华山之Session绝学Session我们称之为会话控制,是一种在服务器端保持会话状态的解决方案。通俗点来讲就是客户...

取消回复欢迎 发表评论: