Redis的持久化操作—RDB&AOF
RDB(Redis DataBase):Rdb 保存的是dump.rdb文件
顾名思义,他是一个redis的一个数据库备份文件,是一个快照,可以保存当前时间内数据库内的所有信息。它会在指定的时间间隔内将内存中的数据集快照写入到磁盘,也就是Snapshot快照,恢复数据的时候,将快照文件直接读取到内存中去。
原理:
Redis会单独创建一个子进程(fork)来进行持久化,会先将数据写入到一个临时文件中去,等持久化过程结束后,再用这个临时文件替换上次持久化号的文件,整个过程中,主进程不进行任何io操i做,因为所有的io操做都在子进程中进行了,相当于我备份文件不占用主进程的资源。这就确保了极高的性能。 如果需要大规模数据库的回复,且对于数据恢复的完整性不做很高的要求,呢么RDB是一种很好的方式,唯一缺点就是:最后一次持久化的数据有i可能会丢失,因为他的作用原理是在一个时间间隔内执行多少次操作后进行快照保存嘛(在redis.conf文件中配置)如果我m秒内没有执行n次操作,此时服务器意外down机了,比如我关闭线程。此时的话就会丢失这个m秒内的数据。
进行数据恢复只需要将备份的rdb文件移到当前执行链接的文件夹下就可以
save 900 1 // 每九百秒中执行一次操作执行快照
save 300 10 // 三百秒中执行10次操作触发快照
save 60 10000 // 60秒中执行10000次操作触发快照
注:Fork:Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程
AOF(append only file):依赖于文件
原理:
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
aof形式的持久化文件为aof后缀的文件,这个文件如果进去更改的话,呢么下一次链接的时候就会出现链接出错的问题,因为系统监测到你的aof文件被损坏了,但是我们可以修复这个文件,具体的方法是,进入到redis安装路径对应的bin目录下,那里会有一个redis-check-aof 的黄色命令把,然后通过这个命令就可以修复了(需要注意的是,修复后,被篡改的数据会呗清除)
修复:
redis-check-rdb --fix aof文件路径
如果aof和rdb共存的话,优先寻找aof文件:
aof和rdb的持久化数据是不互通的 如果只开一个,呢么另一个的数据不受影响,比如我只开启rdb,呢么rdb内有数据,然后我关闭rdb,开启aof,将数据库清空,这个时候会同时有rdb和aof两个持久化文件,如果此时我只让rdb开启,呢么再次启动数据库,数据就i还是rdb的数据。而不是aof的空数据。
此时aof内的数据为空,而rdb有数据,如果他们同时开启,
呢么结果按aof内的数据来,就是还是空