Redis持久化■持久化概述●Redis是运行在内存中,内存中的数据断电丢失●为了能够重用Redis数据,或者防止系统故障,我们需要将Redis中的数据写入到磁盘空间中,即持久化■持久化分类重点● RDB方式:创建快照的方式获取某一时刻Redis中所有 数据的副本●AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化RDB:占用资源少,不需花费大量服务器资源AOF:专门开一个进程,随时进行数据保存,读写同步进行,——类似增量备份,但是占用更大资源,重启服务时,要进行同步数据,启动时间慢,等待时间长。服务器突然关机,不怕数据丢失。不执行最后一条语句RDB持久化2-1■Redis的默认持久化方式■默认文件名dump.rdb■触发条件●在指定的时间间隔内,执行指定次数的写操作(配置文件控制)●执行save或者是bgsave (异步) 命令●执行flushall命令,清空数据库所有数据●执行shutdown命令,保证服务器正常关闭且不丢失任何数据■Redis的默认持久化方式■默认文件名dump.rdb■触发条件,在指定的时间间隔内,执行指定次数的写操作(配置文件控制)●执行save或者是bgsave(异步) 命令执行flushall命令,清空数据库所有数据●执行shutdown命令,保证服务器正常关闭且不丢失任何数据shutdown save最安全的数据保存方式●适合大规模的数据恢复●如果业务对数据完整性和一致性要求不高,RDB是很好的选择●数据的完整性和一致性不高●备份时占用内存RDB启动方式:save指令 手动执行一次拍照●dbfilename dump.rdb说明:设置本地数据库文件名,默认值为dump.rdb经验:通常设置为dump-端口号.rdb●dir说明:设置存储.rdb文件的路径经验:通常设置成存储空间较大的目录中,目录名称data●rdbcompressionyes说明:设置存储至本地数据库时是否压缩数据,默认为yes,采用LZF压缩经验:通常默认为开启状态,如果设置为no,可以节省CPU运行时间,但会使存储的文件变大(巨大)●rdbchecksum yes说明:设置是否进行RDB文件格式校验,该校验过程在写文件和读文件过程均进行经验:通常默认为开启状态,如果设置为no,可以节约读写性过程约10%时间消耗,但是存储一定的数据损坏风险save 按顺序保存,容易阻塞服务器bgsave 手动启动后台保存操作,但是不是立即执行注意: bgsave命令 是针对save阻塞问题做的优化。Redis内部所有涉及到RDB操作都采用bgsave的方式,save命令可以放弃使用。save second changes作用: 满足限定时间范围内key的变化达到指定数量进行持久化参数 second: 监控时间范围 changes:监控key的变化量●全量复制在主从复制中详细讲解●服务器运行过程中重启debug reload●关闭服务器时指定保存数据shutdowm saveAOF数据持久化■Redis默认不开启■弥补RDB的不足(数据的不一致性)■采用日志的形式来记录每个写操作,并追加到文件中■Redis重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作■AOF的重写机制●AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多●当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩■AOF重写的原理●Redis会fork出一条新进程,读取内存中的数据(并没有读取旧文件),并重新写到-一个临时文件中,最后替换旧的aof文件AOF重写随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了 AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将对同一一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录。AOF重写作用●降低磁盘占用量,提高磁盘利用率●提高持久化效率,降低持久化写时间,提高IO性能●降低数据恢复用时,提高数据恢复效率■AOF的重写配置vim /etc/redis/6379.conf#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为nono-appendfsync-on-rewrite no#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作auto-aof-rewrite-percentage 100#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOFauto-aof-rewrite-min-size 64mb# appendfsync always 每次写入操作均同步AOFappendtsync everysec 每秒在系统宕机情况下1秒钟的数据# appendfsync no 系统控制aof-load-truncated yes#在日志进行BGREWRITEAOF时,如果设置为yes表示新写操作不进行同步fsync,只是暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为nono-appendfsync-on-rewrite no 默认是no#当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作auto-aof-rewrite-percentage 100#当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOFauto-aof-rewrite -min-size 64mbAOF重写方式●手动重写bgrewriteaof●自动重写auto-aof- rewrite-min-size sizeauto-aof-rewrite-percentage percentage