非關係型數據庫--redis的持久化策略(RDB,AOF)介紹及配置

一、Redis持久化概述
Redis的高性能是由於其將所有數據都存儲在了內存中,爲了使Redis在重啓之後仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。

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

1、    RDB持久化(默認支持,無需配置)
該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。
2、    AOF持久化
該機制將以日誌的形式記錄服務器所處理的每一個寫操作,在Redis服務器啓動之初會讀取該文件來重新構建數據庫,以保證啓動後數據庫中的數據是完整的。
3、    無持久化
我們可以通過配置的方式禁用Redis服務器的持久化功能,這樣我們就可以將Redis視爲一個功能加強版的memcached了。
4、    redis可以同時使用RDB和AOF

二、RDB機制的介紹和使用
1、RDB的優點:
a、    一旦採用該方式,那麼你的整個Redis數據庫將只包含一個文件,這對於文件備份而言是非常完美的。比如,你可能打算每個小時歸檔一次最近24小時的數據,同時還要每天歸檔一次最近30天的數據。通過這樣的備份策略,一旦系統出現災難性故障,我們可以非常容易的進行恢復。
b、    對於災難恢復而言,RDB是非常不錯的選擇。因爲我們可以非常輕鬆的將一個單獨的文件壓縮後再轉移到其它存儲介質上
c、    性能最大化。對於Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork(分叉)出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。
d、    相比於AOF機制,如果數據集很大,RDB的啓動效率會更高。

2、RDB的缺點:
a、    如果你想保證數據的高可用性,即最大限度的避免數據丟失,那麼RDB將不是一個很好的選擇。因爲系統一旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁盤的數據都將丟失。
b、    由於RDB是通過fork子進程來協助完成數據持久化工作的,因此,如果當數據集較大時,可能會導致整個服務器停止服務幾百毫秒,甚至是1秒鐘。

3、RDB的配置:
a、快照參數設置(默認已設置)
在redis.conf中找到

   save 900 1 #每900秒(15分鐘)至少有1個key發生變化,則dump內存快照。
   save 300 10 #每300秒(5分鐘)至少有10個key發生變化,則dump內存快照
   save 60 10000 #每60秒(1分鐘)至少有10000個key發生變化,則dump內存快照

保存退出即可。
b、保存位置設置
在redis.conf中找到

# The filename where to dump the DB 下面寫入
dbfilename dump.rdb  
# Note that you must specify a directory here,... 下面寫入
dir ./

然後保存退出即可。

三、AOF機制的介紹和使用
1、AOF的優點:
a、    該機制可以帶來更高的數據安全性,即數據持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事實上,每秒同步也是異步完成的,其效率也是非常高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘之內修改的數據將會丟失。而每修改同步,我們可以將其視爲同步持久化,即每次發生的數據變化都會被立即記錄到磁盤中。可以預見,這種方式在效率上是最低的。至於無同步,無需多言,我想大家都能正確的理解它。
b、    由於該機制對日誌文件的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌文件中已經存在的內容。然而如果我們本次操作只是寫入了一半數據就出現了系統崩潰問題,不用擔心,在Redis下一次啓動之前,我們可以通過redis-check-aof工具來幫助我們解決數據一致性的問題。
c、    如果日誌過大,Redis可以自動啓用rewrite機制。即Redis以append模式不斷的將修改數據寫入到老的磁盤文件中,同時Redis還會創建一個新的文件用於記錄此期間有哪些修改命令被執行。因此在進行rewrite切換時可以更好的保證數據安全性。
d、    AOF包含一個格式清晰、易於理解的日誌文件用於記錄所有的修改操作。事實上,我們也可以通過該文件完成數據的重建。

2、AOF的缺點:
a、    對於相同數量的數據集而言,AOF文件通常要大於RDB文件
b、    根據同步策略的不同,AOF在運行效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。

3、AOF的配置:
a、AOF開關:
打開redis.conf找到

appendonly  yes/no 選一個狀態(默認爲關閉狀態)

保存退出
b、AOF策略選擇:
打開redis.conf找到

 #  always    每次有數據修改發生時都會寫入AOF文件
 #  everysec  每秒鐘同步一次,該策略爲AOF的缺省策略
 #  no        從不同步。高效但是數據不會被持久化
appendfsync always/everysec/no 選一個狀態

保存退出

四、持久化文件數據恢復(AOF)
1、    flushall操作  清空數據庫
2、    及時關閉redis服務器(防止dump.rdb)。  shutdown nosave
3、    編輯aof文件,將日誌中的flushall命令刪除並重啓服務即可


喜歡的朋友點個關注哦~~

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章