当前位置: 首页 > news >正文

Redis持久化之RDB

一.什么是RDB

RDB持久化就是定期把当前进程Redis内存中所有数据都写入硬盘中,生成一个快照(Redis给内存中当前存储的这些数据赶紧拍张照片,生成一个文件,存储在硬盘中。后期Redis一旦重启,内存中的数据就没有了,就可以根据刚才的快照,将之前的数据给恢复过来,再恢复到内存中)

二.触发方式

1.手动触发

程序员通过redis客户端执行特定的命令来触发快找到生成

save

执行save后,redis就会全力以赴的进行快照的生成操作,此时就会阻塞redis其他客户端的命令,导致类似于keys*的后果

bgsave

bg即background,也就是后台,不会影响redis服务器处理其他客户端的请求和命令。那Redis是搞了个多线程吗?不是的。记住,Redis一定是单线程的。此处Redis是使用多进程的方式来完成并发编程的场景的,来实现bgsave。

bgsave命令的运行流程

1.向父进程发送bgsave命令,Redis父进程去判断现在是否存在正在执行的持久化进程,比如RDB/AOF进程,如果有就直接返回

2.父进程执行fork命令创建子进程。fork命令会阻塞父进程。通过info stats命令查看latest_fork_usec选项,就可以获得最近一次的fork用时,单位为微秒。

3.父进程fork完毕之后,bgsave命令返回“Background saving started”信息并不再阻塞父进程。可以继续响应其他命令。

4.子进程创建RDB文件,根据父进程内存生成临时快照文件

5.子进程发送信号给父进程,父进程更新统计信息

save和bgsave的区别

1.save是同步操作,执行期间不能执行任何redis命令,无法处理任何客户端请求

2.bgsave是异步操作,通过fork子进程进行持久化,主进程继续处理请求(仅在fork期间短暂阻塞)

3.save是由主进程直接写入硬盘(即RDB文件)

4.bgsave则是由子进程将数据写入RDB文件,完成后退出

示例如下:

我们先找到RDB文件在哪里。可以查看redis配置文件(在etc/redis中)redis.conf,里面有如下配置项

dbfilename是dump.rdb,也就是说,存放内存快照的文件名称为dump.rdb

dir就是说,dump.rdb这个文件放在/var/lib/redis下面。如下:

我们可以看一下当前文件中有什么:

然后打开redis进行一些操作之后再打开rdb文件(在另一个客户端中打开文件,原来的哪个redis客户端不要关(关了就会自动触发bgsave):

但好像没什么变化。

现在手动触发bgsave:

在另一个窗口再去查看rdb文件

这回有所改变。这就是手动触发

2.自动触发

在Redis的配置文件中设置一下,让Redis每隔多长时间或没产生多少次修改就自动触发快照的生成。

redis的配置文件就放在/etc/redis目录下,叫做redis.conf

在配置文件中有一个关于保存频率的配置项,如下

表示,15分钟内有一次修改或者5分钟内有10次修改或者1分钟内有10000次修改的话就会自动触发RDB。

三.dump.rdb文件

dump.rdb文件是一个二进制的文件,它将内存中的数据以压缩的形式(压缩消耗一定的cpu资源),保存在这个二进制文件中

redis服务器默认开启rdb机制。

后续redis服务器重新启动,就会尝试加载这个文件,如果发现格式错误,就可能加载数据失败。

当执行生成rdb镜像的操作时,就会把要生成的快照数据,先保存在一个临时文件中,当这个快照生成完毕后,再删除之前的rdb文件,把新生成的临时的rdb文件名改成dump.rdb。所以自始至终,rdb文件就只有一个。

相关文章:

  • OSCP备战-mr-robot靶机详细解法
  • docker问题记录
  • 2025/5/25 学习日记 linux进阶命令学习
  • 有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(下)
  • 基于diffusion的图像编辑与inpaint
  • mysql数据库之备份
  • 【PhysUnits】13 减法操作(sub.rs)
  • 右键管理工具,让你电脑实用更加顺滑!
  • 第11次课 while循环
  • 第三方检测机构如何凭借专业公正保障软件质量?资质有哪些?
  • 深入解析Java组合模式:构建灵活树形结构的艺术
  • PostgreSQL windows安装
  • 【AI Study】第三天,Python基础 - 同NumPy类似的类库
  • Global Securities Markets 第二章知识点总结
  • 英语六级-阅读篇
  • 嵌入式学习 D27:系统编程--进程
  • ind_knn_ad环境搭建和运行【用自己的数据集】
  • MySQL(36)如何使用CASE进行条件表达式?
  • dify_plugin数据库中的表总结
  • Typescript学习教程,从入门到精通,TypeScript 进阶语法知识点及案例代码详解(13)
  • 山西晋中网站建设/seo网络营销技巧
  • 网站界面设计如何实现功能美与形式美的统一/百度热度榜搜索趋势
  • 网站设计图能用ps做么/爱站工具包的主要功能
  • 婚纱摄影网站seo方案/软文网
  • 网站连接微信支付/百度搜索引擎下载免费
  • 企业网站排名提升软件能优化/电话营销外包公司