Redis持久化
1、持久化概述
●Redis是运行在内存中,内存中的数据断电丢失
●为了能够重用Redis数据, 或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化
2、持久化分类
●RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
●AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
RDB持久化
1、Redis的默认持久化方式
2、默认文件名dump.rdb
3、触发条件
●在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
●执行save或者是bgsave (异步) 命令
●执行flushall命令,清空数据库所有数据
●执行shutdown命令,保证服务器正常关闭且不丢失任何数据
4、优缺点
●适合大规模的数据恢复
●如果业务对数据完整性和一致性要求不高,RDB是很好的选择
●数据的完整性和一致性不高
●备份时占用内存
[root@localhost ~]# vim /etc/redis/6379.conf
save 900 1
save 300 10
save 60 10000
//900秒之内至少一次写操作、300秒之内至少发生10次写操作、60秒之内发生至少10000次写操作,只要满足其一都会触发快照操作,注释所有的save项表示关闭RDBdbfilename dump.rdb
//RDB文件名称dir /var/lib/redis/6379
//RDB文件路径rdbcompression yes
//是否进行压缩
AOF持久化
■Redis默认不开启
■弥补RDB的不足(数据的不一致性)
■采用日志的形式来记录每个写操作,并追加到文件中
■Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
[root@localhost ~]# vim /etc/redis/6379.conf
appendonly yes //开启AOF持久化
appendfilename "appendonly.aof" //AOF文件名称appendfsync always //开启
#appendfsync everysec
#appendfsync no //注释
always:同步持久化,每次发生数据变化会立刻写入磁盘
everysec:默认推荐,每秒异步记录-次(默认值)
no:不同步交给操作系统决定如何同步aof-load-truncated yes //忽略最后一条可能存在问题的指令
AOF的重写机制
●AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多
●当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩AOF重写的原理
●Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件)并重新写到一个临时文件中,最后替换旧的aof文件
#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是
暂存在缓冲区里,避免造成磁盘IO操作冲突,等重写完成后在写入。redis中默认为nono-appendfsync-on-rewrite yes
#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作
auto-aof-rewrite-percentage 100
#当前A0F文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺
寸较小导致频繁的BGREWRITEAOFauto-aof-rewrite-min-size 64mb