RDB(Redis DataBase)
Redis会淡出创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程结束时,再用这个临时文件替换上次持久化的好的文件。整个过程,主进程不进行任何IO操作,这就确保了极高的性能,如果需要进行大规模数据的恢复,且对数据恢复的完整性不是非常敏感,RDB方式要比AOF方式更加高效,RDB的缺点就是可能会丢失最后一次持久化后的数据。
rdb保存的文件是 dump.rdb,可以在配置文件中配置
触发机制
- save的规则满足的条件下
- 执行flushall
- 退出redis
恢复rdb文件数据
只需要将rdb文件放在配置文件中的rdb配置目录,启动redis时,会自动检查dump.rdb恢复其中的数据
查看需要存在的位置
优点
- 适合大规模的数据恢复
- 对数据完整性要求不高
缺点
- 需要一定的时间间隔(可自动以)
- 若redis意外宕机,最后一次修改的数据就丢失了
- fork一条进程的时候回占用一定的内存空间
AOF(Append Only File)
以日志的形式来记录每个写操作,将Reids执行过的写入指令记录下来,只许追加文件但不可以改写文件,redis启动之初会读取aof文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令全部执行一次以完成数据的恢复工作。
如果aof文件被恶心修改、损坏,redisg是不能启动的,此时可以使用redis-check-aof来进行修复
1 redis-check-aof --fix
但是修复后,可能会丢失一些数据
重写规则
若aof文件大于指定值,会fork一个新子进程将文件重写
优点
- 每一次修改都同步,确保文件的完整性
- 每秒同步一次,可能会丢失一秒的数据
- 从不同步,效率最高
缺点
- 相对于数据文件来说,aof远远大于rdb,修复速度比rdb慢
- aof运行效率要比rdb慢(涉及到大量的IO操作)
扩展
1.Redis能对AOF文件进行重写,使得AOF文件体积不至于过大
2.只做缓存,只希望数据在服务器运行的时候存在,也可以不做任何持久化
3.同时开启两种持久化方式:
- redis重启会优先载入AOF文件来恢复原始数据,因为通常情况下AOF文件保存的数据比RDB要完整
- RDB数据不实时,更适合用于备份数据库(AOF在不断变化不好备份),快速重启,而且不会有AOF可能潜在的bug