2016-12-22 13:58:48 該系列文章鏈接NoSQL 資料庫簡介Redis的安裝及及一些雜項基礎知識Redis 的常用五大數據類型(key,string,hash,list,set,zset)Redis 配置文件介紹Redis 持久化之RDBRedis 持久化之AOFRedis 主從複製 ...
2016-12-22 13:58:48
該系列文章鏈接
NoSQL 資料庫簡介
Redis的安裝及及一些雜項基礎知識
Redis 的常用五大數據類型(key,string,hash,list,set,zset)
Redis 配置文件介紹
Redis 持久化之RDB
Redis 持久化之AOF
Redis 主從複製
Redis 事務
Redis 發佈與訂閱
Redis jdedis 介紹
redis 作為緩存的優秀資料庫,也提供了將緩存中的數據寫入到硬碟的手段。
有兩種:一種是 RDB,另一種則是 AOF,本篇文章介紹 RDB。
1.RDB 簡介
RDB:redis database
定義:在指定的時間間隔內將記憶體中的數據集快照寫入到硬碟中,也就是 snapshot 快照,它恢復時是將快照文件直接讀取到記憶體中
2.RDB 持久化過程
簡單來說,就是 redis 會單獨創建(fork)一個子進程來進行持久化,先將數據寫入到硬碟中的一個臨時文件中,等到持久化過程結束,就用這個臨時文件替換上次持久化好的文件。
整個過程中,主進程不進行任何與之相關的IO操作,這就確保了 redis 的極高性能
那麼:什麼叫 fork?
redis 會複製一個與當前進程一樣的進程。新進程的所有數據(eg:程式計數器)數值都和原進程一致,但是是一個全新的進程,並作為原進程的子進程
3.RDB 在 redis.conf 的配置
RDB 在 redis.conf 中的模塊是 snapshotting。
下麵簡單介紹下 snapshotting
3.1 save
將資料庫保存在磁碟上:
save <seconds> <changes>
如果同時發生了給定的秒數和針對DB的給定寫入操作數,則將保存資料庫。
在下麵的示例中,出現這些情況將會保存:
在900秒(15分鐘)內至少改變了1個 key
在300秒(5分鐘)內至少改變了10個 key
在60秒內至少改變了10000個 key
註意:您可以通過註釋掉所有"save"行來完全禁用保存。
也可以通過添加帶有單個空字元串參數的save指令來刪除所有先前配置的保存點,如下例所示:
save ""
3.2 stop-writes-on-bgsave-error
預設情況下,如果啟用了RDB快照(至少一個保存點)並且最新的後臺保存失敗,Redis將停止接受寫入命令。
這將使用戶意識到(以一種困難的方式)數據沒有正確地保存在磁碟上,否則很可能沒有人會註意到以至於會發生一些災難。
如果後臺保存過程將再次開始工作,Redis將會自動允許再次寫入。
然而,如果您已設置對Redis伺服器和持久性的正確監視,則可能需要禁用此功能,以便即使磁碟,許可權等存在問題,Redis也將繼續正常工作。
3.3 rdbcompression
資料庫在 dumb.rdb 文件保存數據時使用LZF壓縮字元串對象?
預設設置為“yes”,因為它幾乎總是一個勝利。
如果要在保存子項中保存一些CPU,請將其設置為“no”,但如果您具有可壓縮值或鍵,則數據集可能會更大。
(在業界這個一般設置為 no,因為很多程式員認為不需要給老闆省硬碟空間,畢竟在多買個硬碟就好了。空間換時間!)
3.4 rdbchecksum
RDB的第5版開始,CRC64校驗和位於文件的末尾。
這使得格式更能抵抗損壞,但在保存和載入RDB文件時有一定的性能損失(大約10%),因此您可以禁用它以獲得最佳性能。
禁用校驗和創建的RDB文件的校驗和為零,將告訴載入代碼跳過檢查。
3.5dbfilename
RDB方式保存數據的文件名
3.6 dir
工作目錄。
數據將使用'dbfilename'配置指令指定的文件名寫入此目錄
aof 文件也將被創建在此目錄中。
請註意,您必須在此處指定目錄,而不是文件名。
4.如何觸發或停止 RDB
觸發 RDB 有很多種方式:
4.1 在 redis.conf -> save 中寫下觸發的條件
然後滿足此條件會自動以 RDB 方式持久化
4.2 使用 save 或者 bgsave 命令主動觸發快照
save: save 只管保存,其它所有讀寫操作都會阻塞
bgsave: redis 會在後臺非同步時進行快照操作,快照同時可以響應客戶端請求,也可以通過 lastsave 命令獲取最後一次成功執行快照的時間
4.3 執行 flushall 命令,這沒有什麼意義
動態停止 RDB 保存規則方法:
redis-cli config set save ""
5.反持久化:將 RDB 的數據還原到記憶體中
config get dir 獲取存儲數據的目錄
將備份文件 dump.rdb 移動到 redis 安裝目錄並啟動服務即可
6.RDB 的優勢與劣勢
6.1 優勢
適合大規模的數據恢復
對數據完整性和一致性要求不高
6.2 劣勢
在一定時間間隔內做一次備份,所以如果 redis 出現意外的話,就會丟失最後一次的所有修改
fork 父進程的時候,父進程記憶體中的數據被克隆了一份,大致 2 倍的膨脹率需要考慮