1. 程式人生 > >Redis持久化的兩種方式和配置

Redis持久化的兩種方式和配置

Redis優秀的效能是由於其將所有的資料都儲存在記憶體中,同樣memcached也是這樣做的,但是為什麼Redis能夠脫穎而出呢,很大程度上是因為Redis有出色的持久化機制,能夠保證伺服器重啟後,資料不會丟失。下面來看看Redis是如何持久化的。

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

RDB方式介紹

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

RDB方式配置

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

1) 設定觸發條件:

這裡寫圖片描述 

這裡寫圖片描述

2) 設定rdb檔案路徑

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

這裡寫圖片描述

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引數來禁用壓縮。

這裡寫圖片描述

壓縮和不壓縮的優缺點:

壓縮:

優點:減少磁碟儲存空間
缺點:消耗CPU資源
  • 1
  • 2
  • 3

不壓縮:

優點:不消耗CPU資源
缺點:佔用磁碟空間多
  • 1
  • 2
  • 3

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