如上圖,其中 *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...