redis为什么要有持久化?
redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,如果宕机或断电,数据就会丢失,所以redis提供了持久化功能。
持久化过程是怎么样的?
redis会创建一个子进程,然后将数据写入一个临时文件,在持久化过程结束之后,再用这个临时文件替换上次持久化好的文件。
一、RDB(redis database)
在默认情况下,redis是 使用RDB进行持久化,保存的文件为dump.rdb
。
1、如何触发rdb?
(1)在redis的配置文件中,有一条命令sava [时间] [更改条数]
,指在这个时间内进行更改,符合这条命令下,就会创建一个dump.rdb文件,而各个文件会替换掉旧的dump文件
(2)在执行flushall时,也会触发rdb规则,也就是会生成一个dump.rdb文件
(3)在退出redis时,也会产生rdb文件
2、数据如何恢复?
问
:如何恢复数据?也就是在dump.rdb文件中的数据如何恢复?
答
:将rdb文件放在redis的启动目录之下,redis在启动的时候就会恢复dump.rdb的数据
3、优缺点
优点:适合大规模的数据恢复、对数据的完整性要求不高
缺点:需要一定的时间间隔进程进行操作,如果在这个时间中意味宕机,那修改的数据也就没有了;在fork进程时,会占用一定的内存空间。
二、AOF(append only file)
1、触发条件
追加文件,其实就是将执行的写的命令都记录下来,在恢复的时候,就将文件全部执行一遍,达到数据恢复的作用,保存的文件为appendonly.aof
文件
所以只需要将 appendonly no
改为 appendonly yes
即可
更改完毕后需要将redis服务重启
在appendonlf.aof文件中就会记录每次的修改命令
2、appendonlf.aof文件出现人为修改,导致文件命令出现问题,如何解决
文件出现异常时,在使用客户端连接服务端是进不去的,所以必须作出更改,在与redis-server同级目录下有一个文件 redis-check-aof
,同样其实还有一个 redis-check-rdb
,都是用来检查异常并作出修改,这里以redis-check-aof为例
3、优缺点
优点:每次修改都进行同步
缺点:aof文件远大于rdb,修复数据肯定也比rdb慢
4、重写规则
fork一个子进程来重写appendaof.aof文件,压缩为更小的文件
5、如何恢复数据?
与rdb一样,但是需要将前面清除数据的命令删除,如果是意外数据丢失,可直接重启redis-server进行数据恢复,可能重启之前需要进行redis-check-aof,也就是需要进行上面的第二步骤