- 作用
- RDB
- AOF
- RDB/AOF选择
作用
将内存中的数据保存到物理硬盘上,防止数据丢失。支持恢复。持久化方式:快照(mysqlDump,rdb)、写日志(mysql binlog,hbase hlog, aof)
RDB
rdb文件是一个二进制文件,是存储在硬盘中的。也是一种复制媒介
触发机制:
- save(同步)
执行save命令,会导致redis执行队列发生阻塞。数据量大时会降低性能。
文件策略:新的替换老的文件
复杂度:O(N)
- bgsave(异步)
执行bgsave命令, 服务端新建子进程会执行fork()命令消耗一定的内存,速度很快,‘’不会‘’阻塞客户端。其他和save相同,备份时使用临时文件。
- 自动
通过配置save策略 一定时间内数据发生一定数量的改变
优点: 无法控制备份频率,容易触发频繁的save
dbfilename dump-{port}.rdb 备份文件名
dir 备份目录
stop-writes-on-bgsave-error yes 错误时是否停止写入
rdbcompression yes 压缩
checksum yes
- 不可忽略的触发机制方式
- 全量复制
- debug reload
- shutdown
AOF
rdb: 耗时耗性能,不可控,丢失数据(宕机)
AOF: 就是类似于日志功能,通过重新执行备份文件可以恢复数据
appendonly yes 开启
apendfilename "appendonly-port.aof
appendfsync everysec
dir /bigdiskpath
no-appendfsync-on-rewrite yes\
三种策略
- always
写命令刷新到缓冲区->缓冲区到AOF文件, IO开销大,但是不会丢失数据
- everysec
写命令刷新到缓冲区->每秒把缓冲区刷新到硬盘(可能会丢失一秒的数据)
- no
由操作系统决定刷新执行
AOF重写
对覆盖数据保存最新值, 对过期数据进行删除.可优化命令进行合并以达到加速恢复速度,减少占用磁盘存储空间.
- bgrewriteaof fork子进程进行内存内容重写持久化
- aof重写配置 1. auto-aof-rewrite-min-size 重写需要的大小 2. auto-aof-rewtie-percentage 增长率
自动触发机制: aof_current_size>auto-aof-rewrite-min-size;
RDB VS AOF
- RDB 最佳策略 “关” / 集中管理 / 主从,从开
- AOF 最佳策略"开": 缓存和存储 / AOF重写集中管理 / everysec
- 最佳策略: 小分片 缓存或者存储 监控(硬盘/内存/负载/网络) / 足够的内存