Redis开启持久化
Redis支持 RDB
和 AOF
两种方案来实现持久化,默认会开启 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。