redis持久化

首先说一下redis,不管redis作为键值对数据库或者缓存数据库,redis持久化都有存在的意义,那就是用于故障恢复、数据存储恢复。比如你redis虽然只是作为缓存数据库,但是里面有可能存储一些比较重要的数据,如果不进行数据持久化,数据只是存储在内存当中,当redis服务器遇到故障时,数据将会丢失。因此redis数据持久化是不可缺少的一个功能,要学会使用。

redis提供了两种持久化方式:RDB和AOF。下面来简单说明下两种持久化方式的特点和优缺点。


redis持久化的方式

RDB :是redis提供的默认持久化方案,在指定的时间间隔内生成数据集的时间点快照。通俗的讲就是在指定的时间段内将内存中的数据写入到磁盘中。在磁盘上生产一个rdb的备份文件,然后redis在下次重启的时候会加载rdb文件进行数据恢复。

AOF:是redis提供的另外一种持久化方式,它不同于RDB备份数据,而是记录redis服务器执行的所有写操作,在下次redis重启时,重新执行一边这些操作来完成redis数据库的实时恢复。

因此,RDB可以理解为redis数据库的快照,AOF是redis的操作日志。都可以用来做redis的数据恢复。


redis持久化两种方式的优缺点

既然redis持久化可以利用RDB和AOF两种方式,那么他们有何区别呢?下面给大家罗列一些他们之间的区别和各自的优缺点。

RDB的优势:

1、通过上面的介绍我们知道RDB是redis数据库某一个时间点的数据备份。那么它就非常适合用来做数据备份,特别是冷备份。比如每天某一个时间点备份一下redis数据库的当前数据。即是遇到不同的问题,也可以按照时间点恢复到不同时间点时的数据。

2、RDB是直接对数据集进行备份的,相对于AOF利用操作记录进行备份与恢复,速度上有天然的优势,而且RDB进行数据集备份时还支持后台fork出一个子进程单独备份,不影响redis数据的正常使用。

RDB的劣势:

1、RDB的备份机制是某一个时间点的数据集备份,那么它就会存在上一个备份点到出事故之间发生改变的数据集缺失。这样子在出现系统故障时,不能完全保障数据的一致性。

2、RDB进行数据备份时,当当前redis的数据集比较大时,备份是比较占用cup和内存的。因为redis备份时是创建一个子进程进行备份写入到磁盘文件当中,此时redis服务器的内存中会存在两份数据集,所以比较耗时,可能造成redis服务器无法正常处理客户端的需求。

AOF的优势:

1、AOF是为了补充RDB备份时不能保证数据的一致性。它通过记录redis数据库的所有记录的写操作,从而保证redis在重启时在加载AOF的日志文件恢复到redis最后一次执行修改操作时的数据状态。

AOF的劣势:

1、AOF的优势很明显,为了弥补RDB的不足。那么它的劣势也很明显,那就是随着redis数据库使用的时间跨度越大,AOF记录文件会越来越大,那么redis重启时进行数据恢复时耗时就会越久。一般情况下,redis的RDB文件会比AOF的日志记录文件小很多。