RDB(Redis DataBase)
在指定时间间隔内将内存中的数据集快照写入磁盘,恢复时将快照文件
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入一个临时文件,待持久化过程结束,再用临时文件替换上次持久化好的文件。整个过程中主进程不会进行任何IO操作,因此确保了Redis的性能,缺点就是最后一次持久化后的数据可能丢失
Redis默认的持久化方式
持久化触发机制
- save的规则满足的情况下
- 执行flushall命令时
- 退出redis时
如何恢复
只需要将rdb文件放在redis启动目录就可以了,redis启动会自动检查dump.rdb恢复数据
优点
- 适合大规模数据恢复,不影响性能
- 合适对数据的完整性不高
缺点
- 需要一定的时间间隔进行操作,如果Redis意外宕机,最后一次修改数据就没有了
- fork执行的时候会占用一定的内存空间
AOF(Append Only File)
同样fork一个子进程,以日志的形式来记录每一个写操作,将Redis执行的所有指令记录下来(读操作不记录),只往文件中追加而不是改写,Redis启动时会读取文件去重构数据
配置后重启生效,如果AOP文件内容被编辑过并且不在符合格式,Redis将无法正常启动,可以使用redis-check-aof --fix appendonly.aof
来修复文件
优点
- 每次修改都同步,文件的完整性更好
缺点
- 相对于大数据文件,AOP远远大于RDB,修复速度比RDB慢
重写
开启后如果AOP文件大于64MB,就会fork一个新的进程来将文件重写,保证文件不会太大
总结
如果只做缓存,可以不用持久化