缓存中间件-redis的AOF持久化细节
如果说RDB是以二进制的形式保存的redis数据库以及键值对信息,那么AOF保存的就是具体的命令了。
首先,注意一点,RDB持久化是默认打开的,如果要使用AOF持久化功能,则需要手动开启。
比如我们执行“set key value”这个命令,那么AOF中保存的就是“set key value”。
大家都知道,AOF是append only file,服务器每次执行写入命令,都会将这个命令追加到aof_buf缓存中。
Redis服务器进程就是一个事件循环,每次执行完一次事件循环都会调用flushAppendOnlyFile函数,根据redis.conf配置文件中的参数appendfsync判断是否将aof_buf中的内容写入到AOF文件中。
appendfsync取值:
always 每次循环都将aof_buf中的命令直接写入到AOF文件中,最慢,也最安全
everysec 每秒将aof_buf中的命令写入到AOF文件中
no 什么时候将aof_buf中的命令写入到AOF文件由操作系统决定
1
2
3
至于AOF文件的加载,则是由Redis服务器读取AOF文件中的命令,然后全部执行一遍,就会将数据重新加载到服务器中。
由于AOF文件记录的是Redis服务器执行过的所有写命令,所以文件会非常大,有重写功能可以对AOF文件的内容进行简化压缩,其实就是将多个写命令合并成一个,以节省空间。但是由于出现过rewrite后的AOF文件无法正常载入的情况,所以为了安全可能不建议使用,具体根据自身情况而定,这里不再赘述。