目录
一、Redis使用持久化保证数据不丢失
二、Redis 持久化的三种方式
三、混合持久化的流程
一、Redis使用持久化保证数据不丢失
Redis 中的数据是存放在内存中的,这样可以保证 Redis 高效的运行,然而内存中的数据会随着系统的重启而丢失,那么 Redis 是如何保证数据不丢失的呢?
Redis 保证数据不丢失的手段是持久化,持久化是指将 Redis 内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化,也就是说 Redis 使用了“持久化”技术来保证 Redis 中的数据不丢失。
二、Redis 持久化的三种方式
- 快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;
- 文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中;
- 混合持久化方式,Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能减低数据丢失的风险。
对于Redis持久化的三种方式,个人主页中也介绍了其中的两种,接下来介绍一个混合持久化,什么是混合持久化呢?其实就是将RDB与AOF结合起来进行数据持久化
三、混合持久化的流程
我们知道,在使用AOF进行数据持久化的时候,当AOF文件过大的时候就会触发重写机制,而这里的重写其实并不完全是将之前的命令整理之后再以文本的方式进行储存,而是将整理好的命令以二进制的方式进行存储,接下来看一下实例。
输入几个Redis命令,由于是实时存储,aof文件中就会立马写入命令
随后找到aof文件并打开,观察还未重写的aof文件
这里可以看出aof是以文本的方式将命令进行追加到文件中的,并且以特定的符号进行分隔
由于没有达到aof文件默认的重写条件,这里进行手动重写,并且我们也能发现这里的重写是在后台进行的,也就是在子进程中进行重写操作的
重写完成之后,再次打开aof文件进行观察 (退出客户端ctrl+d)
这里就可以发现,重写之后,aof文件中的命令就从文本的方式变成了二进制的方式的存储
打开客户端,输入一些命令,后续再查看aof文件
这里就可以发现aof文件的重写其实是采用的混合持久化的方式,将重写的数据以二进制来存储,新的数据仍然以文本的方式追加
至于为什么要采取混合持久化的方式,这是因为二进制的存储比文本存储的方式更加节省空间,同时在Redis服务器重启的时候加载aof文件的速度也是有所提升的