Redis設計與實現-持久化篇

來源:互聯網
上載者:User

標籤:緩衝   imm   客戶   命中   建立   緩衝區   協議格式   ref   報錯   

redis資料庫
  1. 預設16個資料庫,每個資料庫由一個redis.h/redisDb結構表示,此結構裡的dict字典與expires字典,其中dict儲存了該庫所有索引值對,此字典即為鍵空間;expires字典儲存了資料庫中所有鍵的到期時間,該字典的鍵為指向鍵空間中的某鍵對象,值為long long 類型的整數表示的到期unix時間戳記。
  2. 對鍵空間進行操作時還有額外的一些操作:
    • 更新命中或不叫用次數;
    • 更新LRU(最後一次使用)時間;
    • 判斷鍵是否到期,若到期則先刪除此鍵然後在執行其他動作;
    • 如果有watch命令監視此鍵,則將此鍵標識為dirty讓應用程式注意到;
    • 修改鍵對dirty計數器+1以觸發持久化及複製操作;
    • 發送可能的資料庫通知
  3. redis使用惰性刪除與定期刪除配合策略
    • 惰性刪除:只在取鍵是判斷是否刪除,對CPU友好對記憶體不友好;
    • 定期刪除:每隔一定時間執行一次,且限制執行的時間長度和頻率,多次遍曆各庫,隨機檢查到期時間並刪除
  4. RDB持久化模式對到期的鍵處理:
    • 產生rdb檔案時已到期的鍵不會儲存到檔案裡;
    • 載入時如果當前伺服器已主伺服器模式運行,則忽略到期鍵,如果從伺服器模式則不論到期都載入然後等待與主伺服器同步到已到期的鍵。
  5. AOF持久化模式對到期鍵的處理:
    • 只有在到期鍵被惰性刪除或定期刪除後才會在AOF檔案裡追加一條DEL記錄;
    • AOF重寫與產生RDB檔案類型,到期鍵不會報錯到重寫後的AOF檔案中
  6. 複製模式下主伺服器通過發送DEL命令控制從伺服器的到期鍵刪除,從服務不去判斷是否到期或是否應刪除。
  7. redis2.8版本支援兩種資料庫通知:
    • 鍵空間通知:即通知某個鍵都執行了哪些命令;
    • 鍵時間通知:即通知某個命令被哪些鍵執行了。

以上文字來自Dimmacro,轉載請說明來源:http://www.cnblogs.com/dimmacro/ 

RDB持久化:儲存資料庫中某個時間點的索引值對
  1. SAVE和BGSAVE命令都可以產生二進位RDB檔案到磁碟,只是SAVE命令會在建立檔案過程中一直阻塞,期間不能處理任何用戶端的命令請求,而BGSAVE會fork一個子進程,不影響主進程接收並執行命令;
  2. redis伺服器在啟動時會先看AOF是否開啟,優先使用AOF檔案來還原資料庫狀態,只用AOF關閉才會載入RDB檔案;伺服器在載入RDB檔案期間會一致處於阻塞狀態直到完成;
  3. SAVE、BGSAVE、BGWRITEOF三個命令不會同時執行;
  4. 對於BGSAVE,由於伺服器記錄上距上次成功SAVE或BGSAVE後所有資料庫狀態已被修改的次數以及上次的時間點,所以使用者可以通過save 時間段 修改次數 的命令形式來設定自動觸發BGSAVE,如save 60 1000 表示60秒內超過1000次的修改就需要觸發一次BGSAVE。
  5. RDB檔案內部各內容結構圖:
AOF持久化:儲存伺服器所執行的寫命令
    1. AOF開啟後伺服器執行完一個寫命令,會以協議格式將此寫命令寫到aof_buf緩衝區末尾,每個事件處理完後根據不同的appendfsync策略進行寫入與同步aof檔案:
      • always:將aof_buf內的所有內容寫入並同步aof檔案;
      • everysec:將aof_buf內的所有內容寫入aof檔案,並由一個專門的線程檢查距離上次同步aof是否超過1秒,超過則同步本次內容到aof檔案,預設的方式;
      • no:將aof_buf內的所有內容寫入aof檔案,但由作業系統來決定何時同步
    2. aof重寫通過讀取資料庫中當前的索引值對來重建aof檔案,達到合并多條寫命令來減小aof檔案的體積的目的,並不是對現有的aof檔案進行任何讀取,分析或者寫入操作。
    3. aof重寫的過程如下:
      • 主進程fork出一個子進程來進行重寫,重寫期間主進程的新的寫命令會寫到aof重寫緩衝區;
      • 子進程完成重寫後會發送一個訊號給主進程通知重寫完成;
      • 主進程將aof重寫緩衝區中新的寫命令繼續寫入到新aof檔案,並將新aof檔案改名,原子的覆蓋現有的aof檔案,實現新舊aof檔案的替換;

以上文字來自Dimmacro,轉載請說明來源:http://www.cnblogs.com/dimmacro/ 

Redis設計與實現-持久化篇

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.