redis-持久化

redis的高效是因为数据都是内存中的,所以各种访问效率都很高,但是断电了怎么办呢,存盘呗,也就是常说的持久化。
持久化这块常被面试问到,但是大多数都是问到两种持久化都是干嘛的,深入的问题问的不太多,但是还是想深入讨论一下,以免问到不知所措。
可以通过配置来打开或关闭持久化,也可以都打开或者单独打开某一种持久化。通过配置可以自动触发持久化,也可以通过命令来触发持久化,但是一般都是在做实时备份一类的操作才使用,因为持久化还是比较消耗资源的。

RDB
就是制作内存的一个快照文件,若内存比较大,这个写磁盘的压力可想而知。
它比较简单,而且主从复制的功能最开始同步数据就是RDB文件进行的。
一般用于冷备使用,由于不是实时备份,所以有很大程度的丢数据可能。相当于MySQL的整库导出sql备份。

AOF
记录的是redis中所有的执行命令,是增量添加的,相当于MySQL的binlog日志。所以也是实时性比较强的。每次持久化只写一些增量数据,所以资源消耗相对较小。
值得注意的是,AOF会不停的增长,所以AOF文件会有一个重写的机会,重写AOF的时候是,会开启一个子进程和一个buf,子进程将旧的AOF文件进行整理(例如添加一个值然后又删掉的就直接不记录等),同时有新命令写入的时候写入就AOF文件也写入buf中,当旧AOF文件整理完成后再将buf中的新执行的命令写入到新AOF文件中,然后用新AOF文件喜欢旧AOF文件,这样就重写完成。这个过程对于开发人员来说并不复杂,但是了解到这里的人真不算太多。这也是面试的加分项。可能面试人员没有问到这么深,但是可以回答AOF文件的时候顺带说出来,多花不了半分钟作为装X环节就好。

混合模式
Redis4.0以后才支持。RDB简单小巧但是实时性差,AOF实时性好但是啰嗦。各有优缺点,所以就有了取长补短的方法。
混合模式就是AOF中混合了RDB,这样就减少了一部分AOF的啰嗦,使用RDB的小巧来弥补。方法就是AOF文件重写的时候先把RDB写进去,然后把RDB之后写入的命令按照AOF的格式追加到后面。

Redis重启加载持久化数据
宕机或者重启后,Redis会主动加载持久化的文件。
加载顺序首先加载AOF的,若加载不到才加载RDB的。若啥都加载不到?没办法,那就是个空的库呗。

posted @ 2021-03-31 17:47  Q-JayLee  阅读(45)  评论(0)    收藏  举报