redis-持久化

1、概述

redis支持两种持久化方式,rdb和aof。rdb是数据库某一时刻的快照,aof是Append Only File,aof通过写命令记录数据库的状态。目前我们线上没开rdb,主从redis都开启了aof everysec。

2、RDB

有两个命令可以生成RDB文件,一个是save,另一个是bgsave。

save命令会阻塞redis进程,直到生成rdb文件,阻塞期间不能处理任何命令,一般线上很少使用。

bgsave命令的保存工作是由子进程执行的,子进程生成rdb文件的过程中,主进程仍然可以处理客户端的命令。

用户可以通过redis配置来设置rdb的保存频率,服务器是通过执行bgsave来生成rdb文件的。

save  900  1:服务器在900秒之内,对数据库至少进行了1次修改

save  300  10:服务器在300秒之内,对数据库至少进行了10次修改

save  60  10000:服务器在60秒之内,对数据库至少进行了10000次修改

3、aof

aof记录的是redis接收到的客户端写请求,当redis接收到写命令时,会先记录到内存的aof_buf缓冲区的末尾,当满足配置的aof持久化策略时,就会写入或同步到磁盘中。

always:每个事件循环将aof_buf缓冲区中的内容写入并同步到aof文件。

everysec:每个事件循环将aof_buf缓冲区中的内容写入到aof文件,每1秒同步一次。

no:每个事件循环将aof_buf缓冲区中的内容写入到aof文件,但并不对aof文件进行同步,同步交给系统处理。

aof文件里面有很多失效的数据,会占用大量的空间,redis会根据配置对aof文件进行重写。

no-appendfsync-on-rewrite no 在aof文件重写时appendfsync选项是否设置成no,如果设置成no将会将同步磁盘的工作交给系统,如果redis挂了有一些写记录是没有同步到aof文件中的,会丢失部分数据,如果设置不设置成no将会根据appendfsync同步数据,两个进程同时向磁盘同步数据会出现写抖动。

auto-aof-rewrite-percentage 100 当前aof文件大小是上次日志重写得到aof文件大小的二倍时,自动启动新的日志重写过程。

auto-aof-rewrite-min-size 64mb  当前aof文件启动重写过程的最小值,避免刚刚启动reids时由于文件尺寸较小导致频繁的重写。

aof重写是通过子进程进行的,重写过程中如果redis收到新的写命令将会记录到重写缓冲区中,主进程定期调用wait3函数等待子进程退出,并将重写缓冲区中的日志记录到新的aof文件中。

4、其它

redis启动的时候,优先加载aof文件,如果aof没有aof文件,再加载rdb文件。

你可能感兴趣的:(redis-持久化)