1、 redis的持久化
在(2)中介绍了持久化与主从模式的数据同步间的关系,这里我们来详细的讨论持久化的问题。 redis持久化的目的是将数据写到磁盘中,防止内存中的数据丢失。redis有三种持久化方式: RDB、AOF、RDB+AOF。
2、 持久化模式介绍
RDB
RDB即快照,这是redis默认的持久化方式,他会将数据库快照保存在名字为 dump.rdb的二进制文件中。简单来说,RDB就是在某一时刻将数据库的内容直接写到文件中。
RDB的优点在于其生成的文件较为紧凑,同时可以较快的从文件中恢复数据。缺点在于当数据集较大的时候,其生成文件的速度较慢,而且在两次RDB之间的时间节点里,redis出现了宕机的情况,那么最后一次RDB之后的数据就会被丢失。
RDB的使用方式
使用save或bgsave命令,可以让redis执行数据保存操作。
bgsave save 900 1 save 300 10 save 60 10000bgsave是立即执行,save后需要两个参数,即执行条件。第一个参数是时间,第二个参数是操作的次数。“save 60 10000”表示在60秒内发生10000次写操作,满足这个条件便执行数据保存操作。
备注:上述save的三个条件即redis的默认存储条件。
AOF
AOF即日志,持久化的方式是记录数据库所有的写操作,在服务器启动的时候将写操作重新执行一遍。AOF模式下的新增数据会被追加到文件末尾。
AOF的优点在于其写入的速度较快,同时在意外宕机的时候丢失的数据较少,缺点在于其生成文件较大,恢复数据的时候较慢。
redis为了优化AOF,提出了一个重写功能,可以精简AOF文件的大小,加快恢复数据的速度。
重写功能原理:AOF只是记录写操作,随着数据库的使用会产生很多废操作。例如,用户在数据库中插入了一个数据a1,一段时间后不再需要这个数据了,于是将a1删除了。这时候在数据库中实际是没有a1这个数据的,但是在AOF文件中却有插入和删除两条操作记录。重写的作用就是去除这种废操作。
调用AOF的重写功能,首先需要开启AOF选项,然后使用bgrewriteaof命令:
#开启AOF appendonly yes #重写AOF文件 bgrewriteaofAOF+RDB
AOF与RDB各有优缺点,将RDB与AOF综合到一起运用可以有效的利用双方的优点。这种用法大致是先使用RDB记录某一个时间节点的数据库,在下一个时间节点到来之前的增量数据使用AOF来记录,恢复的时候会先加载最新的RDB文件,然后在加载这个RDB时间节点后的AOF文件。
