目录
一、Redis持久化的原理
1、RDB方式:
2、AOF方式:
二、redis 持久化配置
1、RDB持久化相关配置
2、AOF持久化相关配置
一、Redis持久化的原理
Redis默认情况下,是把数据存储在内存中的,所有数据的写入,查询等操作都是直接操作内存。存在的问题就是,假如断电后,数据即丢失,为了解决这个问题,Redis提供了向磁盘中写入数据的方式,即持久化机制。Redis持久化机制的方式有两种,RDB和AOF
1、RDB方式:
默认启动的数据持久化方式,基于时间的快照,只保留当前最新的一次快照,根据配置文件指定策略,它定期将内存中的数据快照到磁盘上的二进制文件
具体实现过程:Redis主进程先fork出一个子进程,子进程将内存的数据保存为一个临时文件,然后将临时文件写入到磁盘上中,最后用这个临时文件替换原来的RDB文件。
优点:
- RDB 快照 保存了某个时间点的数据,可以通过脚本执行 bgsave 非 阻塞 或者 save( 阻塞 命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不同时间点的版本。
- 可以最大化 IO的性能,因为父进程在保存 RDB 文件的时候唯一要做的是 fork 出一个子进程,然后的操作都会有这个子进程操作,父进程无需任何的 IO操作,RDB在大量数据比如几个G的数据,恢复的速度比AOF的快。
缺点:
- 存在数据丢失的风险,因为RDB文件是定期生成的,如果Redis意外崩溃,最近一次生成RDB文件之后的数据可能会丢失。
- RDB文件的恢复速度可能较慢,特别是当数据集较大时,fork子进程可能需要耗费大量的时间和内存。
2、AOF方式:
AOF持久化将Redis服务器接收到的每个写命令追加到文件末尾。这个AOF文件是一个以文本方式记录Redis操作的日志文件,它可以重现服务器从启动到当前的所有写命令。因此AOF文件会随着时间的增长而文件大小不断扩大,并且可能会造成额外的数据记录。但是Redis还有一个机制,可以自动的扫描AOF文件,并且把冗余的操作进行合并,该机制由bgrewriteof命令实现,该命令在执行后,会将Redis中的数据以命令的方式保存起来,并替换原有的文件。
优点:
- 提供更高级别的持久性,能够在故障发生时提供更好的数据恢复保证。
- 可以配置不同级别的同步策略,从而实现不同程度的性能和数据安全之间的权衡。
缺点:
- AOF文件通常比RDB文件更大。
- 在恢复大型AOF文件时,加载数据的速度可能会较慢。
二、redis 持久化配置
1、RDB持久化相关配置
在redis.conf中1、save
RDB持久化主要是通过save参数配置,
save后面第一个参数为时间,单位是秒,第二个参数为改动次数。
因此,第一行表示在900秒内,改动次数超过1此时,就进行持久化备份,
第二行表示在300秒内,改动次数超过10次,就进行持久化备份,
第三行表示在60秒内,改动次数超过10000次,就进行持久化备份。
通常而言,改动次数越多,所需要时间就会越短。2、stop-writes-on-bgsave-error yes
当该参数设置为yes时,在进行RDB备份的时候,一旦发生错误,就会停止写操作。3、rdbcompression yes
当该参数设置为yes时,RDB持久化备份会进行压缩,这个过程会消耗CPU资源,但是会节省存储空间。4、rdbchecksum yes
当该参数设置为yes时,Redis在生成RDB备份文件时会生成校验信息,在启动加载RDB文件时,会对RDB文件的校验码进行检查,只有校验检验成功,才会启动Redis,该参数会导致Redis启动变慢,但是可以防止错误。5、dbfilename dump.rdb
该参数定义了RDB文件的名称。6、rdb-del-sync-files no
用于控制在RDB持久化时是否同步删除旧的RDB文件。当设置为no时,Redis在生成新的RDB文件之前不会删除旧的RDB文件。这个参数的默认值是yes,表示生成新的RDB文件之前会同步删除旧的RDB文件。7、dir ./
该参数定义了RDB文件的存放路径。
2、AOF持久化相关配置
1、appendonly no
该参数定义了是否开启AOF持久化,为NO,表示不开启AOF持久化,为YES,表示开启AOF持久化,默认为NO,表示不开启AOF持久化。2、appendfilename "appendonly.aof"
该参数定义了AOF持久化的写入文件。3、appendfsync everysec
表示何时进行持久化,当参数为always时,每次收到写命令时,立即进行AOF持久化备份,这样做可以最大程度上防止数据丢失,但是会造成性能下降;
当该参数为everysec时,表示每秒钟写一次,不管这一秒收到多少个数据写请求;
当该参数为NO时,表示由操作系统决定何时进行持久化备份。4、no-appendfsync-on-rewrite no
当该参数为yes时,表示在重写时,对于新的写操作不做同步,而是暂时存放在内存中。
5、auto-aof-rewrite-percentage 1006、auto-aof-rewrite-min-size 64mb
该参数也是定义了AOF持久化的时机,后面跟的是一个大小,比如当该值为63mb时,表示当文件为63mb时会进行持久化操作。