一、前言
Redis是內存數據庫,數據都是存在內存中,內存存儲很容易造成數據的丟失,因為當服務器關機等一些異常情況都會導致存儲在內存中的數據丟失,為了讓數據能夠長期保存,就要將Redis放在緩存中的數據做持久化存儲,Redis支持兩種持久化方式,一種是RDB(快照)也是默認方式,另一種是AOF(Append-only file)的方式。
- RDB:在指定的時間間隔能對你的數據進行快照存儲。
- AOF:記錄每次對服務器寫的操作,當服務器重啟的時候會重新執行這些命令來恢復原始的數據。
二、RDB簡介
RDB是一種將快照存儲持久化方式,具體就是將Redis某一時刻的內存數據保存到硬盤的文件中,默認保存的文件名為dump.db,而在Redis服務器啟動時,會重新加載dump.rdb文件的數據到內存當中恢復數據。 RDB功能最核心的是rdbSave和rdbLoad兩個函數。
RDB持久化的觸發分為兩種,手動觸發和定時觸發。
1、手動觸發:
- save:會阻塞當前Redis服務器,直到持久化完成,線上應該禁止使用
- bgsave:與save不同的是該觸發方式會fork一個子進程,由子進程負責持久化過程,因此阻塞只會發生在fork子進程的時候。
2、自動觸發
- 根據我們的save m n配置規則觸發;
- 從節點全量復制時,主節點發送rdb文件給從節點完成復制操作,主節點會觸發bgsave;
- 執行debug reload時;
- 執行shutdown時,如果沒有開啟aof,也會觸發
配置
1 # 時間策略 2 save 900 1 3 save 300 10 # 表示300s內有10條寫入,就產生快照 4 save 60 10000 5 6 # 文件名稱 7 dbfilename dump.rdb 8 9 # 文件保存路徑 10 dir /home/work/app/redis/data/ 11 12 # 如果持久化出錯,主進程是否停止寫入(保護持久化的數據一致性問題) 13 stop-writes-on-bgsave-error yes 14 15 # 是否壓縮 16 rdbcompression yes 17 18 # 導入時是否檢查 19 rdbchecksum yes
三、AOF簡介
與RDB存儲某個時刻的快照不同,AOF持久化方式會記錄客戶端對服務器的每一次寫操作命令,並將這些寫操作以Redis協議追加保存到以后綴aof文件末尾,在Redis服務器重啟時,會加載運行aof文件的命令,以達到恢復數據的目的。
配置
Redis默認不開啟AOF持久化方式,我們可以在配置文件redis.conf中開啟並進行更加詳細的配置
1 # 開啟aof機制
2 appendonly yes
3
4 # aof文件名
5 appendfilename "appendonly.aof"
6
7 # 寫入策略,always表示每個寫操作都保存到aof文件中,也可以是everysec或no
8 appendfsync always
# appendfsync everysec
# appendfsync no
9
10 # 默認不重寫aof文件
11 no-appendfsync-on-rewrite no
12
13 # 保存目錄
14 dir ~/redis/