redis持久化RDB和AOF的区别;以及AOF的重写
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis持久化RDB和AOF的区别;以及AOF的重写相关的知识,希望对你有一定的参考价值。
概述
redis
有两种持久化方式:
redis
默认采用的RDB
方式
RDB(Redis DataBase)
:在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中。即在指定目录下生成一个dump.rdb
文件。Redis
重启会通过加载dump.rdb
文件恢复数据。
AOF(Append Only File)
:用日志的形式来记录每个写操作,并追加到文件中。Redis
重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
综上简述:
RDB
就是整个redis db
打一个内存快照,即整库备份。
AOF
就是使用文件不断的记录写操作的日志。
AOF的三种方式
Always(同步写回)
: 命令写入AOF
缓冲区后调用系统fsync
操作同步到AOF
文件,fsync
完成后线程返回。(因为一直在同步写,性能较差)Everysec(每秒写回)
: 命令写人AOF
缓冲区后调用系统write
操作,write
完成后线程返回。fsync
同步文件操作由专门线程每秒调用一次。(默认模式,性能适中)No(操作系统自动写回)
: 命令写入AOF
缓冲区后调用系统write
操作,不对AOF
文件做fsync
同步,同步硬盘操作由操作系统负责,通常同步周期最长30秒。(性能高,但是安全性不佳)
那么AOF
经过不断的追加会带来一个问题,就是占据的磁盘空间越来越大。因此redis
还有一个AOF
重写机制,将AOF
的文件大小进行精简。
当AOF
文件大小是上次rewrite
后大小的一倍且文件大于64M
时触发,从redis
内存中读取数据,重新生成一份新的AOF
文件,来替换原先庞大的AOF
文件。
这里的“一倍”和“64M”
可以通过配置文件修改。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
以上是关于redis持久化RDB和AOF的区别;以及AOF的重写的主要内容,如果未能解决你的问题,请参考以下文章