redis持久化
RDB (Redis Database)
RDB是Redis的一种数据持久化到磁盘的策略, 是一种以内存快照形式保存Redis数据的方式。 所谓快照,就是把某一时刻的状态以文件的形式进行全量备份到磁盘, 这个快照文件就称为RDB文件,其中RDB是Redis DataBase的缩写。
配置文件说明
自动保存配置
text
# save seconds changes 6.0.16以及之前
save 900 1 #900秒有一个键发生变化
save 300 10 #300秒有10个键发生变化
save 60 10000 #60秒有10000个键发生变化
# save seconds changes [seconds changes] 7以及之后
save 3600 1 300 10 60 10000 # 1h-1 5min-10 1min-10000
文件夹配置
text
dir ./dumpfile # 持久化文件夹目录
rdbfilename dump.rdb # RDB文件名字
注意
执行FLUSHALL FLUSHDB 也会产生dump文件 及时备份dump文件
手动保存配置
bash
save # 会阻塞redis 不建议使用
bgsave # fork()一个子线程+ copyonwrite
RDB的优点
- 非常适合备份
- 适合灾难恢复
- 提高性能
- 相比AOF启动恢复更快
RDB的缺点
- 故障恢复时意外宕机部分数据会丢失
- fork()子线程消耗资源性能
修复RDB文件
bash
redis-check-rdb dump.rdb
禁止rdb
bash
redis-cli config set save ""
# 配置文件
save ""
rdb优化配置
基本不用优化
text
stop-writes-on-bgsave-error yes # 数据一致性
rdbchecksum yes # 校验快照
rdb-del-sync-files no # 没有持久化删除rdb文件
AOF (Append Only File)
默认不开启
开启AOF
保存文件为 appendonly.aof
text
appendonly yes
注意
并不是直接写到aof文件中,而是先缓存,到达一定量再写入磁盘避免IO
AOF重写,对AOF进行压缩
三种写回策略
text
# 默认每一秒
appendfsync everysec
# everysec 每秒写回
# always 同步写回 命令不丢失 io增加
# no 由操作系统写回
版本不同
6之前 和RDB文件夹一样 aof有且只有一个 7以后 在 RDB目录下新建文件夹 aof
text
appenddirname "appendonlydir"
appendfilename "appendonly.aof"
# base 基本
# incr 增量
# history
# manifest 清单
修复AOF
bash
redis-check-aof --fix ./appendonly.aof.1.incr.aof
AOF的特点
更加持久 自动重写
文件比RDB大
AOF重写
触发机制
text
# 同时满足才会重写
auto-aof-rewrite-percentage 100 # 膨胀率
auto-aof-rewrite-min-size 64mb #文件大小
手动触发
bash
bgrewriteaof
根据当前数据库信息重新生成AOF
*.1.base->*.2.base
混合持久化
ok 可以一起开启 优先加载 aof RDB更适合备份
text
aof-use-rdb-preamble yes
混合文件包括RDB+AOF格式
纯内存模式
及关闭RDB+AOF
text
save ""
appendonly no
仍然可以手动备份