开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情
redis持久化
前文
本文内容主要是关于redis持久化的相关知识,包含rdb及aof两种持久化方案在redis持久化中的应用及相关原理等。
redis持久化
redis持久化的方式
首先来看一下redis持久化的方式,主要是包括三种,也可以说成两种及两种方式的混用。
- rdb持久化
- aof持久化
- rdb与aof混用持久化
rdb持久化
rdb持久化是一种通过快照的持久化方式,也就是将当前时刻的全部redis数据进行一次性的持久化快照处理。既然是快照,那么一般情况不可能保证每条命令执行后都进行快照存储,多数情况下都会设置为固定周期内接收到固定数目的redis命令后,进行一次redis的快照存储。而快照存储的过程中,会通过写时复制的方式进行处理。一般情况下我们是通过bgsave采用单独线程进行快照的存储。当该过程中的数据执行命令变更时,会将该数据进行一次复制,其中一份数据用于快照的存储,另一份数据用于redis主线程中数据的处理。显然,这种快照存储的方式在redis服务突然的宕机时,可能会出现大量数据丢失的问题。
aof持久化
相比于rdb持久化的定时定量处理,aof持久化方式主要是以命令为单位进行存储,当然也可以细分为每条命令存储、每秒存储或交给操作系统来进行决定存储的时机,而不同的具体配置也会导致不同的执行效率和宕机时数据的丢失量。aof的存储主要是通过主线程来完成,也就是每条命令开始执行后,首先进行redis中数据的写入,然后再进行aof文件的写入。当然,当aof文件过大时,会触发后台的aof重写技术,将aof文件压缩重写。而在子线程重写过程中,也可能发生数据的变化,此时也是通过写时复制来保证数据的一致性。当数据发生变化时,会在aof重写缓冲区中进行命令的存储,当整个命令执行完毕后,再将缓冲区中的内容追加到新的aof文件中,保证数据的一致性。相比rdb,aof能带来更少的宕机情况的数据丢失。
aof与rdb混合使用
当然,aof和rdb可以混合开启。这样能够在保证效率的同时,也保证数据的较强一致性,降低数据丢失风险。而混合使用的状态下,aof重写的文件中前一部分文件其实就是rdb文件。
总结
本文主要总结了redis持久化的相关知识,对aof和rbd持久化等方式内容进行了整理,比较了几种持久化方式的优缺点。