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,redis,数据库,缓存)