• Redis-持久化讲解


    持久化

    Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。

    RDB

    RDB持久化是把当前进程数据生成快照保存到硬盘的过程。所谓内存快照,就是指内存中的数据在某一个时刻的状态记录。这就类似于照片,当你给朋友拍照时,一张照片就能把朋友一瞬间的形象完全记下来。RDB 就是Redis DataBase 的缩写。

    给哪些内存数据做快照?

    Redis 的数据都在内存中,为了提供所有数据的可靠性保证,它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中。但是,RDB 文件就越大,往磁盘上写数据的时间开销就越大。

    RDB文件的生成是否会阻塞主线程

    Redis 提供了两个手动命令来生成 RDB 文件,分别是 save 和 bgsave。

    save:在主线程中执行,会导致阻塞;对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。 bgsave:创建一个子进程,专门用于写入 RDB 文件,避免了主线程的阻塞,这也是Redis RDB 文件生成的默认配置。

    命令实战演示

    除了执行命令手动触发之外,Redis内部还存在自动触发RDB 的持久化机制,例如以下场景:

    1)使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。

    2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点。

    3)执行debug reload命令重新加载Redis 时,也会自动触发save操作。

    4)默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

    关闭RDB持久化,在课程讲述的Redis版本(6.2.4)上,是将配置文件中的save配置改为 save “”

    bgsave执的行流程

    为了快照而暂停写操作,肯定是不能接受的。所以这个时候,Redis 就会借助操作系统提供的写时复制技术(Copy-On-Write, COW),在执行快照的同时,正常处理写操作。

    bgsave 子进程是由主线程 fork 生成的,可以共享主线程的所有内存数据。bgsave 子进程运行后,开始读取主线

  • 相关阅读:
    Ubuntu22.04安装Git LFS
    java-php-python--数字相册管理系统-点赞演示2021计算机毕业设计
    [附源码]Python计算机毕业设计出版社样书申请管理系统
    git学习(创建项目提交代码)
    搭建PyTorch神经网络进行气温预测
    Apache Hudi 负载类Payload使用案例剖析
    Spring核心解析—Resource与ResourceLoader接口
    推荐一个python、AI学习社区:ShowMeAI
    圣杯布局与双飞翼布局
    RestTemplate响应结果转换
  • 原文地址:https://blog.csdn.net/Huangjiazhen711/article/details/127610388