保證Redis內存中的數據不會丟失,Redis因為斷電等意外停止運行。主要有兩種持久化機制,分別是RDB和AOF。
## RDB
RDB持久化是把當前時刻的數據生成快照持久化到硬盤的過程。
### **觸發機制**
觸發機制有手動和自動。
#### **手動觸發**
> 自動觸發支持兩個命令,save(已廢棄),bgsave
* save
執行時會阻塞Redis進程,如果當前進程數據過大,會阻塞過長的時間,不適合線上環境
* bgsave
作為save的優化方案,減少了阻塞時間。Redis進程fork子進程,并由子進程完成持久化過程。fork子進程期間會阻塞Redis進程。
#### **自動觸發**
### 流程說明
bgsave是主流的觸發RDB持久化方式

### RDB的優缺點
#### 優點
1. RDB文件是某個時間點的全量數據,適合備份場景。比如每6小時執行bgsave命令,并把RDB文件拷貝到遠程機器,用于災難恢復。
2. 通過RDB文件恢復數據的速度遠遠快于AOF
#### 缺點
1. 無法實時持久化(秒級別),fork的花費時間過長
2. 不同版本的Redis生成的RDB二進制文件格式不一致,無法全面兼容
## AOF
1. 解決了RDB無法實時持久化的問題。(不需要fork子進程)
2. Redis持久化的主流方案。
3. 所有的寫命令被保存到獨立日志文件中,需要恢復數據時,執行該獨立日志文件。
### AOF工作流程

### 緩存區同步文件策略
寫命令被添加到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. 自動
配置策略