文章目录
一. 概述redis持久化的俩种模式
随着redis越来越流行,使用者不在仅仅满足其只是一个内存数据库,同时也期望其能将内存数据落磁盘,这样重启服务就不会导致缓存数据丢失了
redis持久化有俩种模式模式,分别如下:
持久化模式 | 说明 | 优点 | 缺点 |
---|---|---|---|
rdb模式 | 定期将redis当前内存数据快照备份到硬盘 | redis重启时恢复速度快 | 由于备份不宜频繁,会导致系统异常宕机时,redis大量数据丢失 |
aof模式 | 将redis执行的命令每隔1s批量同步到文件中 | 机器异常宕机时,最多丢失1s数据 | 由于保存的是命令,会导致保存很多赘余数据,文件过大(这时候恢复起来相对rdb会慢很多) |
二. rdb持久化模式
1.rdb持久化核心思路
获取当前内存快照并将快照数据保存到磁盘实现当前数据全量备份
2.rdb持久化难点
(1)如何获取当前内存数据快照
redis利用linux fork子进程后( cow机制:https://juejin.im/post/5bd96bcaf265da396b72f855 )子进程拥有父进程的内存快照来获取内存快照
(2)保存数据落盘时io操作阻塞其他请求
redis rdb持久化落盘操作只在独立的子进程中进行不会影响到主进程中的其他请求
3.rdb持久化后rdb文件的格式
(1)redis rdb文件整体格式如图1所示
- 开头为固定的REDIS 5个字符,标示这是一个redis rdb文件
- 5.0.0标示保存改rdb文件的redis服务为5.0.0版本
- 64标示保存rdb文件的redis所在机器为64位机
- 1554103539为该rdb文件的创建时间
- 23343563为该rdb内存快照需占用内存大小
- 接着保存的为复制相关标示和数据库数据(见图2)
- EOF标志代表rdb文件结尾
- 63562735845846756为rdb完整性检查的校验和
(2)redis database在rdb文件中的整体格式如图2所示
- S