「这是我参与11月更文挑战的7天,活动详情查看:2021最后一次更文挑战」
RDB
- 上文我们提到订阅者与发布者,如果机器宕机挂掉是无法恢复数据的
- 换个角度去想,如果
Redis
突然宕机呢们是否有一种或多种机制保证数据的不丢失呢 - 而此文介绍的
RDB
就是Redis
做数据持久化的一种 RDB
是作为Redis
上某一个时间点的快照,存储的是二进制形式,存储效率高
- 换个角度去想,如果
快照原理
- 谈到快照我们就要联想到我们操作系统中的写时复制原则(
COW
)- 在我们的内存数据不断变化的同时
- 父子进程是同时面对内存数据的,所以父进程在对一页数据修改的时候
- 子进程对应页的数据是没有变化的,而父进程是修改复制出来的那一份数据
- 所以父进程是不断接收客户端的请求,进行数据的修改
- 而子进程看到数据的那一个时间点数据是不会改变的,所以才叫快照!
- 我们也手动执行快照
- 当我们使用
save
命令的时候,redis
会阻塞一段时间 - 或者使用非阻塞的
bgsave
- 当我们使用
RDB
缺点
- 虽然
RDB
每次保存的是二进制文件- 但是其每次保存的也只是一个时间点,如果在
10:00
子进程进行了快照 - 但是此刻父进程还在持续不断的修改数据,所以我们在
10:00:50
这一刻的时候 - 后面数据依然是丢失的,当数据量很大的时候,数据丢失的量会很大
- 所以我们继续看下一篇的
AOF
- 但是其每次保存的也只是一个时间点,如果在
本文转载自: 掘金