程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Redis總結(四)Redis 的持久化,redis總結

Redis總結(四)Redis 的持久化,redis總結

編輯:C#入門知識

Redis總結(四)Redis 的持久化,redis總結


  前面已經總結了Redis 的安裝和使用今天講下Redis 的持久化。

  

  redis跟memcached類似,都是內存數據庫,不過redis支持數據持久化,也就是說redis可以將內存中的數據同步到磁盤來持久化,以確保redis 的數據安全。

 

 redis持久化的兩種方式

  redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。

  RDB,簡而言之,就是將存儲的數據快照的方式存儲到磁盤上,

  AOF,則是將redis執行過的所有寫指令記錄下來,通過write函數追加到AOF文件的末尾。在下次redis重新啟動時,只要把這些寫指令從前到後再重復執行一遍,就可以實現數據恢復了。

 

  其實RDB和AOF兩種方式也可以同時使用,在這種情況下,如果redis重啟的話,則會優先采用AOF方式來進行數據恢復,這是因為AOF方式的數據恢復完整度更高。

  如果你沒有數據持久化的需求,也完全可以關閉RDB和AOF方式,這樣的話,redis將變成一個純內存數據庫,就像memcache一樣。

 

 RDB

  RDB(Redis DataBase),是將redis某一時刻的數據持久化到磁盤中,是一種快照式的持久化方法。默認的文件名為dump.rdb。

  redis在進行數據持久化的過程中,會先將數據寫入到一個臨時文件中,待持久化過程都結束了,才會用這個臨時文件替換上次持久化好的文件,以確保數據完整可用。

  save 300 10  #300秒內容如超過10個key被修改,則發起快照保存

   

  不過,由於快照方式是在一定間隔時間做一次的,如果對數據的完整性非常敏感,那麼RDB方式就不太適合你,因為即使你每2分鐘都持久化一次,當redis故障時,仍然會有近2分鐘的數據丟失。所以,redis還提供了另一種持久化方式,那就是AOF。

 

 

 AOF

  AOF(Append Only File),即只允許追加不允許改寫的文件。

  Redis會將收到的每一個寫操作(如SET等)通過write函數追加到AOF文件的末尾。默認的AOF持久化策略是每秒鐘fsync一次(把緩存中的寫指令記錄到磁盤中)。

 

  當Redis重啟時會通過重新執行文件中保存的寫命令來在內存中重建整個數據庫的內容。

  appendonly yes           #啟用aof持久化方式
  # appendfsync always    #每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用
  appendfsync everysec     #每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦
  # appendfsync no       #完全依賴os,性能最好,持久化沒保證

  

  但AOF方式是將所有的命令記錄下來,所以AOF文件要比RDB文件的體積大。而且,恢復速度也要慢於RDB方式。

 

  redis提供了bgrewriteaof命令,會重新生成一個全新的AOF文件,其中便包括了可以恢復現有數據的最少的命令集。

 

  需要注意到是重寫aof文件的操作,並沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似。

 

 如何選擇RDB和AOF

  對於我們應該選擇RDB還是AOF,取決於具體的應用場景,官方的建議是兩個同時使用。這樣可以提供更可靠的持久化方案。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved