(五)Redis的持久化
五、Redis持久化
1.Redis持久化的作用
什么是持久化
Redis所有数据保持在内存中,防止因Redis程序崩溃导致数据丢失,将数据的更新异步地保存到磁盘上。
持久化方式
快照:某时某点的数据的完整备份。比如:MySql Dump和Redis RDB
写日志:将每次的操作都记录到日志中。比如MySql Binlog、HBase HLog和Redis AOF
2.RDB
一种复制媒介

3种主要的触发方式:
- save(同步)
![]()
- 注意当数据量很大时,Redis会阻塞
- 文件策略:
- 如果存在老的RDB文件,则将其替换
- 时间复杂度是O(N)
- bgsave(异步)
![]()
- 同样,Redis也会阻塞,但是这种通过创建子进程来完成持久化的方式速度比较快
- 并且在执行第二步fork()之后,Redis还可以正常响应其他的客户端,因为createRDB操作是由子进程来完成的。
- 文件策略以及复杂度与save相同
- 自动
![]()
- 上图配置的意思是,当在60秒内有10000条修改或者300秒内有10次修改的时候,进行自动保存操作,并且内部其实是通过bgsave实现的。
- RDB的最佳配置一般是:
其中rdbcompression yes表示启用压缩存储模式。另外,右侧还应加上rdbchecksum yes表示开启校验和。
save与bgsave对比

触发机制-不容忽略方式
- 全量复制(主从复制)
- debug reload:相当于不将内存中数据清空的重启方式
- shutdown
RDB总结
- RDB是Redis内存到硬盘的快照,用于持久化
- save通常会阻塞Redis
- bssave不会阻塞Redis,但是会fork新进程
- save自动配置满足任一条件就会被执行
- 有些触发机制不容忽视
3.AOF
RDB具有哪些问题:
- 耗时、耗性能
- 不可控、丢失数据
- 备份的不及时数据就可能会丢失
![]()
AOF
运行原理
- 创建
- 恢复
AOF的3种策略
- always
- everysec
- no
3种策略对比

AOF重写

应该要做到
- 减少硬盘占用量
- 加速恢复速度
两种实现方式
- bgrewriteaof
- AOF重写配置
![]()
-AOF重写触发时机:
![]()
- AOF重写流程
- AOF配置
RDB和AOF的选择
对比:

RDB最佳策略

AOF最佳策略

总体最佳策略





其中rdbcompression yes表示启用压缩存储模式。另外,右侧还应加上rdbchecksum yes表示开启校验和。











浙公网安备 33010602011771号