版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33652147/article/details/82937356
1.AOF持久化配置
AOF持久化,默认是关闭的,默认打开的持久化配置是RDB
在redis.config配置appendonly yes ,可以打开AOF持久化
在生产环境中,一般来说AOF是要打开的,除非对一两分钟
没有影响。
打开AOF机制之后,redis没收到一次写命令,就会写入到
日志文件中,当然现写入到OS cache 中,然后每隔一定的时间
在fsync一下,把命令写入到磁盘 中。
如果AOF和RDB都开启了,redis 重启的时候,会优先通过
AOF进行数据恢复的,因为AOF数据比较完整。
AOF有三种fsync策略:
always:每次写入一条数据,立即将这个数据fsync写到磁盘上去(性能很差)
everysec:每秒将os cache内存中的数据fsync到磁盘(生产环境使用这个策略,QPS能达到上万)
no : 仅仅将数据写入到os cache就撒手不管了,os 会根据自己的策略把数据写入到磁盘,不可控
AOF的rewrite,redis中的数据是有限的,很多数据会自动过期,也可能会被用户删掉,可能会被redis用缓存清楚的算法清楚掉。
AOF会自动每隔一定的时间,做rewrite操作。
rewrite过程:
(1)redis fork一个子进程
(2)子进程基于当前内存中的数据,构建日志,开始往一个新的临时的AOF文件中写入日志
(3)redis主进程,接收到client新的写操作之后,在内存中写入日志,同时新的日志也继续写入旧的AOF文件
(4)子进程写完新的日志文件之后,redis主进程将内存中的新日志再次追加到新的AOF文件中
(5)用新的日志文件替换掉旧的日志文件