天天看點

redis 持久化 AOF RDB

AOF設定

AOF檔案的位置和RDB檔案的位置相同,都是通過dir參數設定,預設的檔案名是appendonly.aof,可以通過appendfilename參數來修改。

當用戶端向伺服器發送一些redis指令時,Redis會将所執行的指令記錄到aof檔案中,如下所示:

redis 持久化 AOF RDB

當redis伺服器重新開機後,會将執行該aof檔案,達到資料恢複的目的。

AOF檔案重寫

為什麼要重寫?重寫可以去除資料的中間執行過程,直接保留最終資料指令。

舉個栗子:比如在redis用戶端對key執行了一系列指令

set count 1 //初始值為1  incr count // 加1  incr count //加1  decr count //減1

這個時候結果為

get count  “2”

如果不進行AOF重寫的話,進行AOF檔案恢複的時候,Redis會執行AOF檔案中的每一條指令,并最終得到 count 為2 。

進行AOF重寫後,相當于把中間的計算過程略去。直接把計算得到的結果設定進redis,相當于僅執行了一條指令 set count 2。

可以使用BGREWRITEAOF指令來重寫AOF檔案。

重寫政策

重寫政策的參數設定:

auto-aof-rewrite-percentage 100

目前的AOF檔案大小超過上一次重寫時的AOF檔案大小的百分之多少時,會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF檔案大小為依據。

auto-aof-rewrite-min-size 64mb

限制了允許重寫的最小AOF檔案大小,通常在AOF檔案很小的時候,即使其中有些備援的指令也是可以忽略的。

Redis支援兩種方式的持久化,一種是RDB方式,一種是AOF方式。這兩種方式可以單獨使用其中一種,或者混合使用。 

RDB方式介紹

RDB方式是通過快照完成的,當符合一定條件時Redis會自動将記憶體中的所有資料進行快照,并且存儲到硬碟上。就像拍照一樣,将這一瞬間的所有東西都儲存下來。進行快照的條件在配置檔案中指定。主要有兩個參數構成:時間和改動的鍵值的個數,即當在指定時間内被更改的鍵的個數大于執行數值時,就會進行快照。RDB是Redis的預設持久化方式。 

RDB方式配置

找到Redis的配置檔案:redis.conf

1) 設定觸發條件:

redis 持久化 AOF RDB
redis 持久化 AOF RDB

2) 設定rdb檔案路徑

預設rdb檔案存放路徑是目前目錄,檔案名是:dump.rdb。可以在配置檔案中修改路徑和檔案名,分别是dir和dbfilename

redis 持久化 AOF RDB

Redis啟動後會讀取RDB快照檔案,将資料從硬碟載入到記憶體,一般情況下1GB的快照檔案載入到記憶體的時間大約20-30分鐘。

RDB如何進行快照

RDB的快照過程:

1) Redis使用fork函數複制一份目前程序(父程序)的副本;

2) 父程序繼續接受并處理用戶端發來的指令,而子程序開始将記憶體中的資料寫入到硬碟中的臨時檔案;

3) 當子程序寫入完成所有資料後會用該臨時檔案替換舊的RDB檔案。

手動快照:

如果沒有觸發自動快照,可以對redis進行手動快照操作,SAVE和BGSAVE都可以執行手動快照,兩個指令的差別是前者是由主程序進行快照操作,會阻塞其他請求;而後者是通過fork子程序進行快照操作。

注意:

由于redis使用fork來複制一份目前程序,那麼子程序就會占有和主程序一樣的記憶體資源,比如說主程序8G記憶體,那麼在備份的時候必須保證有16G記憶體,要不然會啟用虛拟記憶體,性能非常差。

RDB檔案的壓縮

RDB檔案過大時,是可以壓縮的,Redis預設開啟壓縮,當然也可以通過配置rdbcompression參數來禁用壓縮。

redis 持久化 AOF RDB

壓縮和不壓縮的優缺點:

壓縮:

不壓縮:

如何選擇? 那就需要看需求、看伺服器資源情況了。

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1941715a,如需轉載請自行聯系原作者