1. 程式人生 > 其它 >redis資料備份

redis資料備份

技術標籤:linux/docker/redis/nginx等

一、RDB 詳解

RDB 是 Redis 預設的持久化方案。
就是在配置檔案裡面設定多久時間之內,執行了多少次寫操作,
就生成一份資料快照dump.rdb檔案,備份到指定是目錄下。

redis.conf 檔案:
在這裡插入圖片描述

以上就是900秒內寫操作執行了1次 300秒/10次 60秒/10000次都會進行資料備份。

觸發RDB快照:

1 在指定的時間間隔內,執行指定次數的寫操作(根據配置檔案中設定的來執行)
2、執行save(阻塞, 只管儲存快照,其他的等待) 或者是bgsave (非同步)命令
3、執行flushall 命令,清空資料庫所有資料。
4、執行shutdown 命令,保證伺服器正常關閉且不丟失任何資料

通過RDB檔案恢復資料

將dump.rdb 檔案拷貝到redis的安裝目錄的bin目錄下,重啟redis服務即可。
在實際開發中,一般會考慮到物理機硬碟損壞情況,選擇備份dump.rdb 。

RDB 的優缺點

優點是隻包含一個檔案,這樣非常方便進行備份。

缺點就是無法實現實時性,因為rdb是有時間間隔的,這個間隔期間出現問題了,資料就沒有備份到。
如果資料量過大,fork一個子程序進行備份的時候,會很耗時。

二、AOF 詳解

Redis 預設不開啟。它的出現是為了彌補RDB的不足(資料的不一致性),
所以它採用日誌的形式來記錄每個寫操作,並追加到檔案中。

Redis 重啟的會根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。

從配置檔案瞭解AOF

開啟 redis.conf 檔案,找到 APPEND ONLY MODE 對應內容

1、 redis 預設關閉,開啟需要手動把no改為yes

appendonly yes

2、指定本地資料庫檔名,預設值為 appendonly.aof

appendfilename "appendonly.aof"

3、指定更新日誌條件

#appendfsync always
#appendfsync everysec
#appendfsync no

always:同步持久化,每次發生資料變化會立刻寫入到磁碟中。
 	    效能較差當資料完整性比較好(慢,安全)。

everysec:出廠預設推薦,每秒非同步記錄一次(預設值)

no:不同步

4 、配置重寫觸發機制

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

當AOF檔案大小是上次rewrite後大小的一倍且檔案大於64M時觸發備份。
一般都設定為3G,64M太小了。

根據AOF檔案恢復資料

正常情況下,將appendonly.aof 檔案拷貝到redis的安裝目錄的bin目錄下,
重啟redis服務即可。

AOF的重寫機制

AOF的工作原理是將寫操作追加到檔案中,檔案的冗餘內容會越來越多。
當AOF檔案的大小超過所設定的閾值時,Redis就會對AOF檔案的內容壓縮。

重寫的原理:

Redis 會fork出一條新程序,讀取記憶體中的資料,並重新寫到一個臨時檔案中。
並沒有讀取舊檔案(你都那麼大了,我還去讀你???)。最後替換舊的aof檔案。
這個新檔案裡面會優化語句,比如多條合併成一條指令,達到瘦身的目的。

AOF 的優缺點

優點:資料的完整性和一致性更高
缺點:因為AOF記錄的內容多,檔案會越來越大,資料恢復也會越來越慢。

三、總結:

Redis 預設開啟RDB持久化方式,在指定的時間間隔內,執行指定次數的寫操作,則將記憶體中的資料寫入到磁碟中。

RDB 持久化適合大規模的資料恢復但它的資料一致性和完整性較差。

Redis 需要手動開啟AOF持久化方式,預設是每秒將寫操作日誌追加到AOF檔案中。

AOF 的資料完整性比RDB高,但記錄內容多了,會影響資料恢復的效率。

Redis 針對 AOF檔案大的問題,提供重寫的瘦身機制。

若只打算用Redis 做快取,可以關閉持久化。

若打算使用Redis 的持久化。建議RDB和AOF都開啟。其實RDB更適合做資料的備份,留一後手。AOF出問題了,還有RDB。