Redis会定期保存数据快照至一个rbd文件中,并在启动时自动加载rdb文件,恢复之前保存的数据。
可以在配置文件中配置Redis进行快照保存的时机:
save [seconds] [changes]
意为在seconds秒内如果发生了changes次数据修改,则进行一次RDB快照保存,例如
save 60 100 save 600 500
Redis每60秒检查一次数据变更情况,如果发生了100次或以上的数据变更,则进行RDB快照保存。
SAVE 和 BGSAVE 两个命令都会调用 rdbSave 函数,但它们调用的方式各有不同:
- SAVE 直接调用 rdbSave ,阻塞 Redis 主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
- BGSAVE 则 fork 出一个子进程,子进程负责调用 rdbSave ,并在保存完成之后向主进程发送信号,通知保存已完成。 Redis 服务器在BGSAVE 执行期间仍然可以继续处理客户端的请求。
采用AOF持久方式时,Redis会把每一个写请求都记录在一个日志文件里。在Redis重启时,会把AOF文件中记录的所有写操作顺序执行一遍,确保数据恢复到最新。
AOF默认是关闭的。如要开启,进行如下配置:
appendonly yesAOF rewrite功能:
随着AOF不断地记录写操作日志,因为所有的写操作都会记录,所以必定会出现一些无用的日志。大量无用的日志会让AOF文件过大,也会让数据恢复的时间过长。不过Redis提供了AOF rewrite功能,可以重写AOF文件,只保留能够把数据恢复到最新状态的最小写操作集。
- appendfsync no:不进行刷盘,将flush文件的时机交给系统决定,速度最快
- appendfsync always:每写入一条日志就进行一次刷盘操作,数据安全性最高,但速度最慢
- appendfsync everysec:折中的做法,交由后台线程每秒刷盘一次
auto-aof-rewrite-percentage 100 AOF文件每增加一倍后,重写 auto-aof-rewrite-min-size 64mb AOF文件初始大小



