八、Redis 基礎命令---管理--持久化--RDB

1、Redis 支持兩種方式的持久化,一種是RDB , 一種是AOF 。可用單獨使用也可以二者結合使用。

2、RDB
     A、RDB方式是Redis默認採用的持久化方式,通過快照(snapshotting)完成的。當符合一定條件時Redis會自動將內存中的所有數據進行快照並存儲在整個硬盤上。進行快照的條件:時間和改動的鍵的個數。當在指定的時間內被更改的鍵的個數大於指定的數值時就會進行快照。
     
     B、配置文件中已經預先設置了3個條件:
          save 900 1
          save 300 10
          save 60 10000

     C、save參數指定了快照條件,可以存多個條件,條件之間是“或”的關係。 如上,在900秒內至少一個鍵被更改就進行快照。時間單位是秒

     D、Redis默認會將快照文件存儲在當前目錄的dump.rdb文件中,也可以通過 dir 和 dbfilename 兩個參數分別指定快照文件的存儲路徑和文件名。

     E、Redis實現快照的過程:
          1)Redis使用fork函數複製一份當前進程(父進程)的副本(子進程)
     
          2)父進程繼續接受並處理客戶端發來的命令,而子進程開始將內存中的數據寫入硬盤中的臨時文件

          3)當子進程寫入完所有數據後,會用該臨時文件替換舊的RDB文件,至此一次快照操作完成。

     F、在執行fork的時候操作系統會使用寫時複製(copy-on-write)策略,即fork()函數發生的那一刻父子進程共享同一內存空間,當父進程要更改某一片的數據時(如執行寫命令),操作系統會將該片數據複製一份以保證子進程的數據不受影響,所以新的RDB文件存儲的是fork()那一刻的內存數據。

     G、Redis是在快照結束後纔會將舊的RDB文件替換成新的,也就是說任何時候RDB文件都是完整的。這時我們就可以通過備份RDB文件來實現Redis數據的備份。
     
     H、RDB文件是經過壓縮的二進制格式,所以佔用的空間小於內存中的數據大小,更加利於傳輸。也可以設置redcompression參數以禁用壓縮。

     I、手動Redis執行快照命令:SAVE \ BGSAVE ,區別是:前者是由主進程進行快照操作,會阻塞住其他請求,後者會通過fork子進程進行快照操作。
     
     J、Redis啓動後會讀取RDB快照文件,將數據從硬盤載入內存。

     K、RDB方式持久化數據,一旦Redis異常退出,就會失去最後一次快照以後更改的數據。如果數據很重要以至於無法承受任何損失,可以使用AOF進行持久化。     










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