Redis 運維實戰 第04期 AOF 持久化

2021-10-10 07:27:18 字數 1982 閱讀 7689

如上圖,其中 *3 表示當前命令有三個部分,每個部分從 $「數字」開始,數字表示這部分中命令、鍵或者值一同有多少位元組。

3 為什麼是 aof 而不是 wal

很多資料庫都是採用的 write ahead log(wal)方式,其特點就是先把修改的資料記錄到日誌中,再進行寫資料的提交,可以方便通過日誌進行資料恢復。

但是 redis 採用的卻是 aof,特點就是先執行寫命令,把資料寫入記憶體中,再記錄日誌。

那麼 redis 為什麼考慮使用 aof 而不是 wal 呢?

這是因為先讓系統執行命令,只有命令能執行成功,才會被記錄到日誌中。因此,redis 使用寫後日誌這種形式,可以避免出現記錄錯誤命令的情況。

另外還有乙個原因就是:aof 是在命令執行後才記錄日誌,所以不會阻塞當前的寫操作。

可配置值 詳解

always

同步寫回:每個寫命令執行完,立馬同步地將日誌寫回磁碟

everysec

每秒寫回:每個寫命令執行完,只是先把日誌寫到 aof 檔案的記憶體緩衝區,每隔一秒把緩衝區中的內容寫入磁碟

no作業系統控制的寫回:每個寫命令執行完,只是先把日誌寫到 aof 檔案的記憶體緩衝區,由作業系統決定何時將緩衝區內容寫回磁碟

具體怎麼配置,建議如下:

如果對效能要求很高,而對資料可靠性要求不高,就選擇 no 策略;

如果想要得到高可靠性保證,就選擇 always 策略;

如果允許資料有一點丟失,又希望效能別受太大影響的話,那麼就選擇 everysec 策略。

5 aof 重寫機制

如果例項執行比較久,並且修改比較頻繁,那麼 redis 的 aof 檔案很可能比較大,那怎麼解決呢?

redis 引入了 aof 重寫機制。

aof 重寫機制是把 redis 程序內的資料轉化為寫命令同步到新的 aof 檔案中。並且重寫的 aof 檔案可以變小,原因如下面幾點:

舊日誌檔案中的多條命令,在重寫後的新日誌中變成了一條命令。

已經過期的 key 不再寫入新的 aof 檔案中。

什麼時候會觸發 aof 重寫機制呢?

首先可以直接執行 bgrewriteaof 命令觸發重寫機制。

而自動觸發涉及到幾個引數

首先在 redis 中執行

其中:aof_current_size:表示當前 aof 檔案空間

aof_base_size:表示上一次重寫後 aof 檔案空間

而在配置檔案中,aof 重寫涉及到以下兩個引數:

auto-aof-rewrite-min-size: 表示執行 aof 重寫時檔案的最小體積,預設為64mb

auto-aof-rewrite-percentage: 表示當前 aof 重寫時檔案空間(aof_current_size)超過上一次重寫後 aof 檔案空間(aof_base_size)的比值多少後會重寫。

同時滿足下面兩個條件,則觸發 aof 重寫機制:

aof_current_size 大於 auto-aof-rewrite-min-size

當前 aof 相比上一次 aof 的增長率:(aof_current_size - aof_base_size) / aof_base_size 大於或等於 auto-aof-rewrite-percentage

歡迎加入 redis 交流社群

群內不定期邀請一些身邊的 redis 大牛

交流分享,解答工作中遇到的的問題

分享工作經驗、面試技巧等!加vx:yzlkf09

也歡迎各位大牛投稿,內容可以是資料庫、開發、運維、產品、運營等!

悅專欄 likecolumn

在這裡,學好程式設計

做更優秀的 it人!

Redis 運維實戰 第03期 Codis

在前面,我們提到了 redis 集群方案 redis cluster,今天我們來聊聊 redis 另外一種比較受歡迎的集群方案 codis。codis 是豌豆莢開源的 redis 分布式中介軟體,使用 go 語言開發,其擁有不停機資料遷移 對客戶端透明 平滑擴容 擁有管理後台等特點。下面我們從幾個方...

Redis運維秘籍

先給大家講乙個基本知識點 資料庫分類大致分為兩類,關係型資料庫和非關係型資料庫。如果詳細區分的話,還可以繼續分下去。redis不僅僅是快取資料庫 面試的時候,很多人會問,redis和memcahce的區別?memcache是乙個純快取的鍵值資料庫,而redis是乙個非關係型的資料庫。兩者的差異較大,...

Redis 運維架構

1.2 redis 高可用架構優劣對比?1.3 常見的 redis 集群方案有哪些優缺點?二 redis 通用 三 redis 故障排查 3.2 如何知道,當前 redis 例項是處於阻塞狀態?3.3 redis 運維的故障有哪些?四 redis 效能優化 redis 是乙個開源的使用 ansi c...