Redis开启持久化

Redis支持 RDBAOF 两种方案来实现持久化,默认会开启 RDB

  • RDB 方式的持久化几乎不损耗 Redis 本身的性能,在进行 RDB 持久化时,Redis 主进程唯一需要做的事情就是 fork 出一个子进程,所有持久化工作都由子进程完成

RDB方式

采用 RDB 持久方式,Redis 会定期保存数据快照至一个 rbd 文件中,并在启动时自动加载 rdb 文件,恢复之前保存的数据。

默认的配置为:

save 900 1
save 300 10
save 60 10000

意思为: 900秒检查一次,如果发生了1条以上的数据变更,则快照保存 300秒检查一次,如果发生了10条以上的数据变更,则快照保存 60秒检查一次,如果发生了10000条以上的数据变更,则快照保存

注:yum安装默认配置文件在 /etc/redis.conf,如果是自己编译安装的,自己找去吧

AOF

采用 AOF 持久方式时,Redis 会把每一个写请求都记录在一个日志文件里。

在 Redis 重启时,会把 AOF 文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。缺点和优点这一看就很明确了吧!

AOF 默认是关闭的,如要开启,进行如下配置: appendonly yes

Redis 为此提供了三种 fsync (把文件在内存中的部分写回磁盘) 配置

  • appendfsync no:不进行 fsync,将 flush 文件的时机交给 OS 决定,速度最快
  • appendfsync always:每写入一条日志就进行一次 fsync 操作,数据安全性最高,但速度最慢
  • appendfsync everysec:折中的做法,交由后台线程每秒 fsync 一次

这样后期文件会越来越大,恢复时间也越来越长,咋办勒。

AOF rewrite功能

可以重写AOF文件,只保留能够把数据恢复到最新状态的最小写操作集。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

Redis 在每次AOF rewrite 时,会记录完成 rewrite 后的 AOF 日志大小,当 AOF 日志大小在该基础上增长了 100% 后,自动进行 AOF rewrite,同时如果增长的大小没有达到 64mb,则不会进行 rewrite。