Redis持久化
图
Redis的持久化是什么?为何需要持久化?如何做到持久化?持久化的机制是什么?持久化的各种方式有什么优缺点?持久化的各种机制性能如何?如何确定Redis持久化的过程中数据不会丢失?

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一个新的进程来将文件重写,保证文件不会太大

总结

如果只做缓存,可以不用持久化