为了保障数据的安全,redis支持两种持久化方式将数据持久化至硬盘:快照和AOF。
快照持久化
快照(snapshotting),它可以将某一时间点所有数据写入硬盘。创建快照后,用户可以备份快照到其他服务器,也可以用恢复数据。如果服务器崩溃,redis将丢失最近一次创建快照之后所有写入的数据。
可以通过配置,也可以通过命令触发:
- save阻塞式创建快照,不常用。
- bgsave导致redis fork一个子进程负责将快照写入硬盘,父进程则继续处理请求。
如果redis内存达几十GB时,bgsave创建子进程耗时会比较长,可能会导致系统长时间地停顿,也可能导致swap。
AOF持久化
只追加文件(append-only file,AOF),它会在执行写命令时,将被执行的写命令写入硬盘。
appendfsync支持三种值:
- always,每次redis写命令都同步写入硬盘,这样会严重降低redis速度,同时也会降低磁盘的寿命。
- everysec,默认值,每秒执行一次同步,显示地将多个命令写入硬盘。
- no,让操作系统来决定何时同步。
通常默认值是比较合理的选项,即便是系统发生崩溃也只会丢失一秒之内产生的数据。AOF持久化将丢失数据的时间窗口降低至1秒(甚至不丢失任何数据),又可以在极短的时间内完成持久化。
AOF在不断增长的情况下,体积会不断增大,redis支持压缩(重写)AOF文件,使AOF文件体积尽可能小。重写会删除旧的AOF,生成新的AOF。
配置
# 快照持久化选项
save 60 1000 //从上一次创建快照起,60s内,有1000次写入触发bgsave(不是save)
stop-writes-on-bgsave-error no //创建快照失败后是否仍然执行写命令
rdbcompression yes //是否对快照压缩
dbfilename dump.rdb //快照文件名
# aof持久化选项
appendonly no //是否开启aof
appendfsync everysec //持久化周期
no-appendsync-on-rewirte no //aof自动执行开关
auto-aof-rewrite-percentage 100 //压缩条件
auto-aof-rewrite-min-size 64mb //压缩条件
dir ./ //保存位置
网友评论