详解redis 的持久化机制

#详解 redis 的持久化机制

1.什么是持久化?

持久化就是把 数据从内存中保存到磁盘上,这就是持久化机制。
是redis本身就有的,不需要配置或者其他操作。

reids默认的持久化机制

redis默认的持久化机制是RDB机制(snapshotting----》全本快照)。

为什么叫RDB机制

因为redis默认的磁盘持久化文件是dump.rdb

替换流程

首先redis会将所有的数据生成一个临时文件,再保存到磁盘中,如果再持久化就将全部数据再生成临时文件,然后再覆盖之前的持久文件(全备份)。

持久化时机

1.在配置文件中有配置的持久化时机。打开redis.config文件,
在里边有一个snapshotting的分割,
详解redis 的持久化机制
里边的持久化机制(可以自定义):
详解redis 的持久化机制

2.程序员可以随时完成命令来执行持久化。bgsave命令来做持久化。

AOF机制

AOF(AppendOnlyFile):以日志的方式做增量备份,也就是把对redis的写操作的命令,形成日志的方式追加到磁盘中。
默认不开启,如果需要开启,在配置文件中修改。
详解redis 的持久化机制

注意:AOF机制开启后,AOF和RDB机制同时运行。AOF机制开启后,如果需要恢复数据,则是通过AOF机制来恢复的。

AOF默认的磁盘文件是appendonly.aof

AOF的持久化时机

在配置文件中配置:

详解redis 的持久化机制

aof恢复数据的流程

比如执行了100个写操作,又执行了80个改操作,又执行了90个删除操作,又执行了40个写操作。。。。那么恢复的时候根据日志记录来重复上边的流程,以达到最终数据一致。
这样是有问题的,对于恢复数据来说很繁琐或者无意义(什么是无意义:在操作很多 之后又把全部数据删除掉了,那么恢复了半天最后还是没数据。)
针对这种操作恢复ridis提供了日志重做功能。

什么是日志重做?

确定appendonly.aof中的命令都是恢复数据有意义的。

怎样日志重做?

将磁盘中的命令全部删除掉(或者覆盖掉),把内存中的数据以命令的方式重写到磁盘中,这样生成的日志就和内存中的数据一致了,并且没有多余的操作命令。

日志重做的时机:

在配置文件中也有。
详解redis 的持久化机制
增量达到100%或者大小大于64mb时重做。

由RDB机制切换到AOF机制时会出现数据丢失的问题。

为什么会丢失,因为之前数据是存到dump.rdb,当切换到AOF机制时恢复数据时从appendonly.aof文件中获取和恢复的,肯定数据不一致或者数据丢失。

怎样解决这个问题

需要热切换。
什么是热切换:在redis正在运行时,先通过命令打开aof机制,这样就会把内存中的数据保存到aof文件中,然后再关掉服务,改置文件,再启动,这样的话数据就在aof文件中了,也就不会丢失了。
详解redis 的持久化机制
热切换开启aof机制的命令。

把持久化机制从AOF改成RDB数据会丢失么?

答案是不会的,因为上边已经说过了,当打开AOF机制时RDB机制也是同时运行的。