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

Redis rdb持久化

目录

一:Redis持久化

二:Rdb介绍

dump.rdb文件:

保存触发的方式:

自动保存:

手动保存:

保存过程

阻塞保存:

非阻塞式保存:

三:优缺点

优点:

缺点:


一:Redis持久化

        众所周知,redis是基于内存的高效数据库。而内存的其中的一个特点就是 断电失效,所以为了防止redis服务崩溃机器断电等导致数据丢失。redis提供了两种持久化方式:RDB和AOF,今天我们来详细介绍 RDB方式持久化。

二:Rdb介绍

        Rdb是redis的默认持久化方式,它实现持久化的方式是在特定时间点(可以自己设置)将内存中的redis数据以二进制压缩的方式存储到一个特定目录下的文件中,默认文件名为:dump.rdb;这个文件中保存了redis中所有的键值对数据


dump.rdb文件:

        1,我们先要找到这个文件的位置,它的路径保存在redis的配置文件中:/etc/redis/redis.conf。我们可以用下面的命令来查看路径

//用grep过滤信息
cat /etc/redis/redis.conf | grep dir

运行该命令:

使用vi命令查看dump.rdb:

vi /var/lib/redis/dump.rdb

        这里我们可以看出dump.rdb里面存储的是不可读的二进制文件。redis服务在启动的时候就会加载该文件中的内容来恢复数据。如果该文件损坏就会导致redis服务无法启动,我们可以通过redis-check-rdb命令来检查

redis-check-rdb /var/lib/redis/dump.rdb

        如果文件损坏了要如何修复这里就不介绍了。


保存触发的方式:

        我们现在知道了redis服务读取dump.rdb文件来恢复数据,那我们什么时候将数据写入到dump文件中呢?分为自动保存和手动保存。

自动保存:

        redis服务的一个核心服务就是定时备份数据,它有许多备份策略存储在redis配置文件中:

cat /etc/redis/redis.conf | grep save
#运行该命令

  • save 900 1 : 900秒内有1次修改就保存一次
  • save 300 10:300秒内有10次修改就保存一次
  • save 60 10000:60秒内有10000次修改就保存一次

        当然大家可以自己修改保存策略,至于这个高效策略就需要通过具体的业务来测试寻找了。而如果不需要自动保存的话可以删除这三条并且添加:save ""(空字符串)

        redis服务在"优雅的退出"(systemctl stop redis-server 或者redis自带的退出命令:redis-cli shutdown)的情况下会自动保存一次,"不优雅的退出"(kill -9 或者断电等)就不会触发。

手动保存:

        连接上redis客户端后,我们可以运行save(阻塞式)bgsave(非阻塞式)两个命令来保存

        保存的具体过程我们下面再讲。


保存过程

        保存分为阻塞式保存和非阻塞式。

阻塞保存:

        阻塞式保存很好理解,redis是单线程的,直接往dump.rdb文件写入数据就好了。但是数据如果过大就会造成长时间阻塞,这不符合redis平常任务的短平快的特点,会影响redis的效率,所以一般不推荐使用。

非阻塞式保存:

        redis是单线程的,所以不能通过多线程来实现后台功能,于是redis选择了多进程,其原理就是linux系统中的 fork() 来创建子进程并将任务交给子进程来实现,同时父进程继续提供redis服务。子进程会生成临时的dump.rdb文件并写入数据,生成完毕后会替换旧的dump文件,有效防止在修改dump文件时程序崩溃导致dump文件被破坏。

        效率方面,因为父子进程共享数据写时拷贝技术,效率并不会低,可以放心使用。

        两种保存方式在启动前都会先检测是否已经在保存的过程中了,如果有的话会保存失败。

        大家可能看不到文件被替换的过程,我们可以通过stat命令来验证文件被替换了,原理是不同的文件inode编号也不同

        这里redis-cli shutdown就是一个bgsave的过程

三:优缺点

优点:

  1. rdb文件是二进制的,二进制格式紧凑,适合备份,数据转移,灾难恢复
  2. 加载快,计算机天生适合二进制,读取数据的速度远快于文本存储的AOF

缺点:

  1. 同样因为是二进制的,导致rdb文件和redis版本相关,不同的版本之间rdb文件可能会失效,这种场景下一般都是写一个服务将旧的内容一条条读取并插入新redis服务
  2. 无法实时持久化,在两个bgsave过程中如果服务宕机就会丢失这个时间内的数据,这在对于安全性要求极高的服务中是不可取的。

        rdb和aof两中方式并不是完全独立的,很多场景rdb会被aof影响,大家可以先去找aof的博客看看,也可以等我下一篇博客。

http://www.dtcms.com/a/450147.html

相关文章:

  • AgentWorkflow 实战:从单 Agent 到多 Agent 协作的完整方案
  • 数据懒加载和虚拟列表
  • 江苏省建设注册中心网站首页在线制作简历网站
  • Java “线程池(2)”面试清单(含超通俗生活案例与深度理解)
  • Linux内核kallsyms符号压缩与解压机制
  • 米思米网站订单取消怎么做基金会网站模板
  • 公司网站源码做智能家居网站需要的参考文献
  • 11. Pandas 数据分类与区间分组(cut 与 qcut)
  • 找家里做的工作到什么网站淄博五厘网络技术有限公司
  • 国外哪些网站做产品推广比较好四川建设人员信息查询
  • 第二章:软件需求
  • AI Agent赋能产品经理:从需求分析到用户增长的全流程实践
  • 网站服务公司案例广州网站建设优化公司
  • AI学习日记——神经网络参数的更新
  • Java进阶教程,全面剖析Java多线程编程,多线程和堆内存栈内存的关系,笔记20
  • 建设春风摩托车官方网站百度站长论坛
  • 长春企业网站建设公司建设银行广州招聘网站
  • 网站 开发 周期定制app开发软件
  • 怎么做网站 ppt货代网站制作
  • 2025-10-06 Python不基础12——class原理
  • 龙泉驿建设局网站谷歌seo是什么职业
  • 从东方仙盟筑基期看 JavaScript 动态生成图片技术-东方仙盟
  • 怎么做电脑网站后台谷歌seo推广服务
  • 【笔记】2.1.1.1 电化学定义与组件特征
  • ISO 11452系列子标准介绍 道路车辆窄带辐射电磁能电干扰的部件试验方
  • 南宁网站制作工具山东建设厅执业资格注册中心网站
  • WebStorm对个人免费开放
  • 免费1级做爰片在线观看网站wordpress QQ登录注册
  • Git仓库Python文件Pylint静态分析
  • 青岛网站建设网站设计游乐网站设计