详解redis 的持久化机制
#详解 redis 的持久化机制
1.什么是持久化?
持久化就是把 数据从内存中保存到磁盘上,这就是持久化机制。
是redis本身就有的,不需要配置或者其他操作。
reids默认的持久化机制
redis默认的持久化机制是RDB机制(snapshotting----》全本快照)。
为什么叫RDB机制
因为redis默认的磁盘持久化文件是dump.rdb
替换流程
首先redis会将所有的数据生成一个临时文件,再保存到磁盘中,如果再持久化就将全部数据再生成临时文件,然后再覆盖之前的持久文件(全备份)。
持久化时机
1.在配置文件中有配置的持久化时机。打开redis.config文件,
在里边有一个snapshotting的分割,
里边的持久化机制(可以自定义):
2.程序员可以随时完成命令来执行持久化。bgsave命令来做持久化。
AOF机制
AOF(AppendOnlyFile):以日志的方式做增量备份,也就是把对redis的写操作的命令,形成日志的方式追加到磁盘中。
默认不开启,如果需要开启,在配置文件中修改。
注意:AOF机制开启后,AOF和RDB机制同时运行。AOF机制开启后,如果需要恢复数据,则是通过AOF机制来恢复的。
AOF默认的磁盘文件是appendonly.aof
AOF的持久化时机
在配置文件中配置:
aof恢复数据的流程
比如执行了100个写操作,又执行了80个改操作,又执行了90个删除操作,又执行了40个写操作。。。。那么恢复的时候根据日志记录来重复上边的流程,以达到最终数据一致。
这样是有问题的,对于恢复数据来说很繁琐或者无意义(什么是无意义:在操作很多 之后又把全部数据删除掉了,那么恢复了半天最后还是没数据。)
针对这种操作恢复ridis提供了日志重做功能。
什么是日志重做?
确定appendonly.aof中的命令都是恢复数据有意义的。
怎样日志重做?
将磁盘中的命令全部删除掉(或者覆盖掉),把内存中的数据以命令的方式重写到磁盘中,这样生成的日志就和内存中的数据一致了,并且没有多余的操作命令。
日志重做的时机:
在配置文件中也有。
增量达到100%或者大小大于64mb时重做。
由RDB机制切换到AOF机制时会出现数据丢失的问题。
为什么会丢失,因为之前数据是存到dump.rdb,当切换到AOF机制时恢复数据时从appendonly.aof文件中获取和恢复的,肯定数据不一致或者数据丢失。
怎样解决这个问题
需要热切换。
什么是热切换:在redis正在运行时,先通过命令打开aof机制,这样就会把内存中的数据保存到aof文件中,然后再关掉服务,改置文件,再启动,这样的话数据就在aof文件中了,也就不会丢失了。
热切换开启aof机制的命令。
把持久化机制从AOF改成RDB数据会丢失么?
答案是不会的,因为上边已经说过了,当打开AOF机制时RDB机制也是同时运行的。