1. 程式人生 > >Redis學習筆記(二) Redis持久化

Redis學習筆記(二) Redis持久化

Redis的所有資料都是儲存在記憶體中,然後不定期的通過非同步方式儲存到磁碟上(這稱為“半持久化模式”);也可以把每一次資料變化都寫入到一個檔案裡面(這稱為“全持久化模式”)。

這裡主要介紹這兩種持久化方法

RDB方式和 AOF方式

可以單獨的使用其中一種方式,也可以將兩者結合起來一起使用

在這種情況下,當 Redis 重啟時,它會優先使用 AOF 檔案來還原資料集,因為 AOF 檔案儲存的資料集通常比 RDB 檔案所儲存的資料集更完整. 你甚至可以關閉持久化功能,讓資料只在伺服器執行時存在.

RDB 是 Redis的預設持久化方法

安裝Redis3.0.5

安裝Reids之前首先要安裝一些依賴

yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl

Redis下載地址:

通過wget下載Redis

wget http://download.redis.io/releases/redis-3.0.5.tar.gz

解壓檔案

tar –zxvf redis-3.0.5.tar.gz

進入Redis目錄

cd redis-3.0.5

執行make 和 make install命令

make
make install

make test 這個需要執行很長的時間 就不執行了

將redis.conf檔案拷貝到etc下面

cp redis.conf /etc/

編輯redis.conf 

修改為後臺啟動

將引數daemonize 修改為 yes 

RDB方式

RDB 持久化可以在指定的時間間隔內生成資料集的時間點快照(point-in-time snapshot)。

在Redis配置檔案中已經預置了3個條件


滿足其中任何一個條件就會進行快照


禁用RDB

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


Redis啟動後會讀取RDB快照檔案,將資料從硬碟中載入到記憶體,一般情況下1GB的快照檔案載入到記憶體的時間約為20~30分鐘.(不同伺服器會存在差異)

如果要禁止Redis的RDB的持久化方式那麼只用吧上面的出發條件禁止掉就OK了


RDB的持久化過程

①   Redis是使用fork函式複製一份當前程序(父程序)的副本(子程序);

②  父程序繼續接收並處理客戶端發來的命令,而子程序開始將記憶體中的資料寫入到磁碟的臨時檔案中;

③  當子程序寫入完所有的資料後會用該臨時檔案替換掉舊的RDB檔案;

注意:

由於Redis使用fork來複制一份當前程序,那麼子程序就會佔有和主程序一樣的記憶體資源,如果主程序是8G記憶體,那麼在備份的時候必須保證有16GB的記憶體,要不然會啟用虛擬記憶體,效能非常的差,如果資料集非常巨大,也可能會影響到CPU

RBD檔案是通過壓縮的, 可以通過配置rdbcompression引數來禁用壓縮


啟動壓縮的話會佔用伺服器的CPU資源

除了Redis自動進行快照,你也可以通過命令進行手痛快照

SAVE   :由主執行緒進行快照

BGSAVE :fork子程序進行快照



AOF方式

AOF 持久化記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集. AOF 檔案中的命令全部以 Redis 協議的格式來儲存,新命令會被追加到檔案的末尾. Redis 還可以在後臺對 AOF 檔案進行重寫(rewrite),使得 AOF 檔案的體積不會超出儲存資料集狀態所需的實際大小

AOF持久化通過修改appendonly引數 來設定 預設是不開啟的

AOF檔案的位置和RDB檔案的位置是相同的,都是通過dir引數設定,預設的檔名是apendonly.aof,也可以通過apendfilename引數修改


AOF內容

在Redis裡面設定幾個key 


檢視產生的AOF檔案


AOF把操作的日誌記錄下來,可以保證資料不丟失,但是AOF會有效能問題,每次操作都會寫一遍檔案.

查詢資料的操作是不記錄的


AOF檔案優化

我們可以使用BGREWRITEAOF命令來重寫AOF檔案

重寫策略的引數設定:


auto-aof-rewrite-percentage

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

上面的表示百分之一百

uto-aof-rewrite-min-size

表示限制允許重寫的最小AOF檔案大小,通常在AOF檔案很小的時候即使其中有些冗餘的命令也是可以忽略的.

我們使用一個hset命令來設定一個key


AOF檔案


執行BGREWRITEAOF命令之後


                         優化之後                       

檔案到磁碟的機制

檔案寫入預設情況下會先寫入到系統的快取中,系統每30秒同步一次,才是真正的寫入到硬碟中,如果在這30秒伺服器宕機的話,那麼資料也會丟失,可以通過修改Reids 配置引數來修改同步策略.


AOF 和 RDB的優缺點和區別