什么是持久化
Redis所有数据保存着内存中,一旦发生类似断电等意外情况,数据就会丢失,所以需要对数据的更新异步的保存到磁盘上。
持久化方式
RDB
什么是RDB
原理就是生成一份快照用于备份
触发RDB的机制
save(同步)
save是一个同步的命令,在每秒访问量十万的系统中,执行save命令会导致其他客户端阻塞(等待一段时间)
特点:
- 文件策略:如果存在老的RDB文件,则替换
- 时间复杂度: O(N)
bgsave(异步)
通过fork一个子进程来执行快照
save vs bgsave
自动生成RDB
- 900秒内有1条修改
- 300秒内有10条修改
- 60秒内有10000条修改
满足以上三条任意一条就会触发自动生成RDB
最佳配置
修改redis.conf中的默认配置
修改点:
- 删除三个save配置,防止备份频率过高
- dump文件名中通过 port端口号来区分,在集群下方便查找
- 修改dump存放目录
容易或略的其他生成RDB的场景
- 全量复制
- debug reload
- shutdown
RDB总结
AOF
RDB现存问题
耗时,耗性能
不可控,丢失数据
AOF运行原理
创建
客户端的所有操作都会追加到AOF文件中
恢复
Redis重启后,将AOF文件重写到Redis中
AOF策略
always
执行写命令时,先把命令写到缓冲区中,缓冲区会根据一些策略刷新到磁盘中
everysec
every seconds, 每隔一秒将缓冲区的命令写到磁盘中
no
由操作系统决定什么时候将缓冲区的命令写入磁盘,不需要我门操心
三者比较
AOF重写
把过期的,重复的,可以优化的命令进行化简,从而达到减少硬盘占用量并且加快数据恢复速度
AOF重写的两种实现方式
-
bgrewriteaof
-
AOF重写配置