1,背景
最近出去面试,有谈到项目中使用redis做缓冲,业务之间可以读redis做数据共享。redis定位是内存数据库,如果没有持久化方案,内存断电重启数据会丢失,所以redis要开启持久化功能,将数据保存在磁盘上,重启后从磁盘读取数据恢复到内存。redis持久化方案提供了两种模式,就是RDB模式(把redis的内存数据库定时创建快照dump到磁盘上),AOF(将redis操作日志追加到文件),这两种方案的场景分别是什么呢?
2,区别
RDB方案是全量复制数据到磁盘,也就是数据快照,操作进程是专门fork出子进程去将数据写入临时文件完成后替换之前的RDB文件,数据的格式二进制压缩存储。save 3600 1000 表示前一次快照3600秒后,当有超过1000个key被改动的时候就进行一次快照更新
![5769c6cf07c45fe16be37c5a2f6f93bf.png](https://img-blog.csdnimg.cn/img_convert/5769c6cf07c45fe16be37c5a2f6f93bf.png)
AOF持久化的不是数据,而是操作命令,增删改数据的操作,以文本的格式记录,可以看到详细的命令记录,appendonly no
![e642d230a01455d241127a8f2b654ea4.png](https://img-blog.csdnimg.cn/img_convert/e642d230a01455d241127a8f2b654ea4.png)
3,分析场景
RDB的方式是对数据备份到一个二进制压缩的数据文件,数据恢复快,占用空间小,虽然fork出一个子进程去生成快照但是没来及备份crash还是会造成数据丢失,全量复制事件比较长,AOF提供everysec每秒同步,always每次修改同步方案,可以最大限度的减少crash造成的数据丢失,AOF文件太大还会触发rewrite机制重写AOF文件压缩一些命令
对数据恢复而言AOF文件比RDB文件慢,同步策略上AOF的秒同步的使用场景效率高,选择上看是否愿意牺牲部分性能去获取更高的缓存一致性,一般更多的采取两种的结合,就是两种模式都开启。