Redis持久化之RDB

「这是我参与11月更文挑战的7天,活动详情查看:2021最后一次更文挑战

RDB

image.png

  • 上文我们提到订阅者与发布者,如果机器宕机挂掉是无法恢复数据的
    • 换个角度去想,如果Redis突然宕机呢们是否有一种或多种机制保证数据的不丢失呢
    • 而此文介绍的RDB就是Redis做数据持久化的一种
    • RDB是作为Redis上某一个时间点的快照,存储的是二进制形式,存储效率高

快照原理

  • 谈到快照我们就要联想到我们操作系统中的写时复制原则(COW)
    • 在我们的内存数据不断变化的同时
    • 父子进程是同时面对内存数据的,所以父进程在对一页数据修改的时候
    • 子进程对应页的数据是没有变化的,而父进程是修改复制出来的那一份数据
    • 所以父进程是不断接收客户端的请求,进行数据的修改
    • 而子进程看到数据的那一个时间点数据是不会改变的,所以才叫快照!

image.png

  • 我们也手动执行快照
    • 当我们使用save命令的时候,redis会阻塞一段时间
    • 或者使用非阻塞的bgsave

image.png

RDB缺点

  • 虽然RDB每次保存的是二进制文件
    • 但是其每次保存的也只是一个时间点,如果在10:00子进程进行了快照
    • 但是此刻父进程还在持续不断的修改数据,所以我们在10:00:50这一刻的时候
    • 后面数据依然是丢失的,当数据量很大的时候,数据丢失的量会很大
    • 所以我们继续看下一篇的AOF

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%