redis進階-持久化的幾種方式

      衆所周知,redis是一個高性能的key-value數據庫,由於操作都是基於內存的,因此存取效率比其他數據要高不少,今天要說的是redis的一個比較重要的知識:持久化。

        redis的高性能是基於內存的,因此自然需要考慮內存的特性,讀寫快,但不穩定,斷電數據會全部丟失,因此redis用戶數據存儲時,就不得不考慮數據的持久性了,及將數據保存在磁盤上,當硬件斷電,重新啓動時自動從磁盤讀取數據,筆者所知道的持久化方式有兩種:RDB和AOF。

 RDB

       RDB筆者用的比較多,相信大家也是,因爲RDB是redis默認開啓的,可能有讀者曾幾何時發現硬件重啓後,redis的數據竟然還在(redis版本不能太老),曾幾何時,redis在更新版本後將rdb加入默認配置裏面了。

       RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件,用二進制壓縮存儲。過程比較簡單,也不需要過多配置。

AOF

       AOF持久化以日誌的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。可以說幾乎是用戶的每一個操作,都會記錄。

開啓方式大家可以百度一下。

相信大家看了兩者的實現方式,心裏大概瞭解了兩者的基本機制和優劣勢了,筆者就自己的使用心得來敘述一下兩種方式

  1. RDB方式備份的磁盤上只有一個文件,而且只保留數據原文件,因此體積不大,對於宕機恢復是相當快的,而AOF則是記錄每次修改,因此體積自然比RDB大不少,對於恢復數據較慢。
  2.  RDB的性能比AOF高,在開始持久化時,它唯一需要做的只是fork出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了,而AOF則需要跟蹤每一個操作redis的進程,記錄每一次的操作,如果操作頻繁,可能會拖慢redis主進程的效率。
  3. AOF的數據安全性要比RDB高不少,由於AOF的同步方式默認是每修改同步,如果服務器宕機,損失的數據幾乎可以忽略不記,而RDB則是週期性備份數據,宕機可能會損失不少東西,因此對於一些數據安全較高的系統,AOF是較好的選擇甚至是必須的選擇

基本配置方式

RDB持久化配置

       Redis會將數據集的快照dump到dump.rdb文件中,當然我們也可以通過配置文件來修改Redis服務器dump快照的頻率,打開redis配置文件之後,我們搜索save,應該可以看到下面的配置信息:

save 900 1              #在900秒之後,如果至少有1個key發生變化,則dump內存快照。

save 300 10            #在300秒之後,如果至少有10個key發生變化,則dump內存快照。

save 60 10000        #在60秒之後,如果至少有10000個key發生變化,則dump內存快照。

       當然大家可以根據項目需求自己更改

AOF持久化配置

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

 

        不過雖然說redis性能高,但是筆者大多數項目裏面redis只是充當中間數據庫的角色,存儲完整數據還是要依靠磁盤數據庫,不過筆者有朋友是有項目裏只有redis來存儲數據,並沒有mysql,sql server等,聽說數據安全性還不錯。具體使用,還需要根據場景需求和程序員的專業能力來操作。

 

 

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