ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
保证Redis内存中的数据不会丢失,Redis因为断电等意外停止运行。主要有两种持久化机制,分别是RDB和AOF。 ## RDB RDB持久化是把当前时刻的数据生成快照持久化到硬盘的过程。 ### **触发机制** 触发机制有手动和自动。 #### **手动触发** > 自动触发支持两个命令,save(已废弃),bgsave * save 执行时会阻塞Redis进程,如果当前进程数据过大,会阻塞过长的时间,不适合线上环境 * bgsave 作为save的优化方案,减少了阻塞时间。Redis进程fork子进程,并由子进程完成持久化过程。fork子进程期间会阻塞Redis进程。 #### **自动触发** ### 流程说明 bgsave是主流的触发RDB持久化方式 ![](https://box.kancloud.cn/de6227ff3590c714165a67c519eae32b_700x502.png) ### RDB的优缺点 #### 优点 1. RDB文件是某个时间点的全量数据,适合备份场景。比如每6小时执行bgsave命令,并把RDB文件拷贝到远程机器,用于灾难恢复。 2. 通过RDB文件恢复数据的速度远远快于AOF #### 缺点 1. 无法实时持久化(秒级别),fork的花费时间过长 2. 不同版本的Redis生成的RDB二进制文件格式不一致,无法全面兼容 ## AOF 1. 解决了RDB无法实时持久化的问题。(不需要fork子进程) 2. Redis持久化的主流方案。 3. 所有的写命令被保存到独立日志文件中,需要恢复数据时,执行该独立日志文件。 ### AOF工作流程 ![](https://box.kancloud.cn/f9c1c4cda5ed31de4da073d29b2dcc2c_312x551.png) ### 缓存区同步文件策略 写命令被添加到AOF缓冲区之后,支持配置多种机制将缓冲区的内容写入日志文件。 1. 同步。写入缓冲区同步写入磁盘的AOF日志文件(系统fsync) 2. 异步1 ,【everysec】。日志写入缓冲区,调用系统write之后立即返回,fsync同步文件由另外的线程完成(write操作只写入磁盘缓冲区,Linux在内核提供了页缓冲区来提高) 3. 异步3【no】【默认策略】 。 与第二种的区别在于,fsync同步文件的策略,同步过程都由独立的线程完成,2每秒一次,3最长30秒。 ### 重写机制 随着AOF日志文件的越来越大,Redis引入了AOF重写机制压缩文件体积。 AOF文件重写是将当前数据转换为写命令重新写入到AOF文件。 触发机制分为手动和自动 1. 手动 调用**bgrewriteaof**命令 2. 自动 配置策略