目录
1、持久化流程
持久化一般来说就是指将数据写入磁盘永久保存(持久化 -- 写磁盘)。以下为持久化的主要流程:
(1)客户发送数据。客户端向服务端发送写操作(数据在客户端的内存中)。
(2)服务器接收数据。数据库服务端接收到写请求的数据(数据在服务端的内存中)。
(3)服务器写数据(缓冲区)。服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。
(4)服务器写数据(磁盘缓存)。操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。
(5)服务器写数据(磁盘)。磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。
- 前三步主要由客户端和服务端的通信、redis数据库完成;
- 从第四步开始,主要是操作系统完成。
redis如何来实现上面5个保存磁盘的步骤。它提供了两种策略机制,也就是RDB(Redis DataBase)和AOF(Append Only File)
2、RDB(Redis DataBase)
一句话:把数据以快照的形式保存在磁盘上。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
在我们安装了redis之后,所有的配置都是在redis.conf文件中,里面保存了RDB和AOF两种持久化机制的各种配置。
如何触发?既然RDB机制是通过把某个时刻的所有数据生成一个快照来保存,那么就应该有一种触发机制,是实现这个过程。对于RDB来说,提供了三种机制:
- save
- bgsave
- 自动化
具体参见文章:https://baijiahao.baidu.com/s?id=1654694618189745916&wfxingr=spider&for=pc
3、AOF(Append Only File)
一句话:将写命令记录。形成文件。
全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。
如何触发
- always:同步持久化 每次发生数据变更会被立即记录到磁盘 性能较差但数据完整性比较好
- 每秒同步everysec:异步操作,每秒记录 如果一秒内宕机,有数据丢失
- 不同no:从不同步
具体同上参考