Skip to content

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的优点

  1. 非常适合备份
  2. 适合灾难恢复
  3. 提高性能
  4. 相比AOF启动恢复更快

RDB的缺点

  1. 故障恢复时意外宕机部分数据会丢失
  2. 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

仍然可以手动备份