1、开启AOF
设置 appendonly yes
表示开启AOF,默认不开启,每一次写操作都会记录一条日志,用于恢复数据使用
这么做有什么好处?------能够保证数据持久化的实时性
AOF文件名通过appendfilename配置设置,默认文件名是appendonly.aof
开启了之后对程序会有什么影响?
我们需要知道的是AOF一定会影响程序的性能,I/O方面,为什么呢?我们看看AOF的过程
写命令—>append到AOF缓冲区—>同步到AOF文件(文件会越来越大,需要定期rewrite压缩)
如果写操作非常繁忙的话,再碰上磁盘“忙”,那么同步到AOF文件也可能花费很长时间,这会对redis集群的PING/PONG起到阻塞的副作用,这种情况下很容易发生程序写操作异常,CLUSTERDOWN The cluster is down,这个问题可能很多小伙伴都会遇到。
2、刷写磁盘
appendfsync always 表示对每一次写操作,强制立即刷写磁盘,提供最高的可靠性
appendfsync everync 每秒钟进行一次刷写磁盘,默认是这种方式
appendfsync no 依赖os来进行刷写磁盘,通常30s,这种情况下可靠性不能很好保证,但由于不会有持续不断的IO,Redis可以获得很好的读写性能
3、rewrite
因为命令越来越多,所以AOF文件也越来越大,Redis通过重写压缩来解决这个问题
触发重写的条件:
- 手动触发 bgrewriteaof命令
- 自动进行 auto-aof-rewrite-min-size和auto-aof-rewrite-percentage 表示配置的重写时文件的最小大小和文件增长比例(表示当前AOF文件比上次重写时增长的比例大小)
重写机制:达到触发条件时,自动fork一个新进程,对所有Redis内存中的每条记录通过Set命令的方式记录一遍。并不是读取旧的AOF文件,而是创建临时文件,最后重命名覆盖之前的文件。这样的好处是不用去管那些发生变化的记录,减少工作量,类似快照,更简单直接。