Redis开发与运维之第五章持久化
1. Redis提供兩種持久化方式 : RDB 和AOF
bgsave 命令的運作流程
RDB優點:
是一個緊湊壓縮的二進制文件,代表Redis在某個時間點上的數據快照非常實用于備份,全量復制等場景。比如每6小時執行bgsave備份,并吧文件拷貝到遠程機器或者文件系統中 hdfs ,用于災難恢復。
RDB恢復數據遠遠快于AOF方式
缺點:
RDB方式數據沒辦法做到實時持久化/秒級持久化。因為bgsave每次運行都要執行fork操作創建子進程,屬于重量級操作,頻繁執行成本過高。
RDB文件使用特定二進制格式保存,Redis版本演進過程中有多個格式的RDB版本,存在老版本Redis服務無法箭筒新版RDB格式的問題。
AOF工作流程
AOF解決了實時性持久化數據問題 采用文本協議格式
原因是: 很好的兼容性、開啟AOF后,所有寫入命令都包含追加操作,直接采用協議格式,避免了二次處理開銷、
文本協議具有可讀性,方便直接修改和處理。
AOF為啥把命令追加到aof_bug中?
redis使用單線程響應命令,如果每次寫AOF文件命令都直接加到硬盤,那么性能完全取決于當前硬盤負載。寫寫入緩沖區aof_bug中,可以提供多種緩沖區同步硬盤的策略,在性能和安全性方面做出平衡。
2.RDB使用一次性生成內存快照的方式,無法做到實時持久化,一般用于數據冷備和復制傳輸。
3.AOF通過追加寫命令到文件實現持久化,通過appendfsync 參數可以控制實時/秒級持久化。因為需要不斷追加寫命令,所以AOF文件體積逐漸變大,需要定期執行重寫操作來降低文件體積。
4. save命令會阻塞主線程不建議使用,bgsave命令通過fork操作創建子進程生成RDB避免阻塞。
5.AOF重寫可以通過 auto-aof-rewrite-min-size 和 auto-aof-rewrite-percentage 參數控制自動觸發,也可以使用bgrewriteaof命令手動觸發。
?AOF重寫運作流程
6. 子進程執行期間使用copy-on-write 機制與父進程共享內存,避免內存消耗翻倍。AOF重寫期間還需要維護重寫緩沖區,保存新的寫入命令避免數據丟失。
7.持久化阻塞主線程場景有: fork阻塞 和 AOF 追加阻塞。 fork 阻塞時間跟內存量和系統有關,AOF追加阻塞說明硬盤資源緊張。
8..單機下部署多個實例時,為了防止出現多個子進程執行重寫操作,建議做隔離控制,避免CPU和IO資源競爭。
everysec 刷盤策略的過程
輪詢控制AOF重寫
總結
以上是生活随笔為你收集整理的Redis开发与运维之第五章持久化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从bootm 命令讲起/U-boot的环
- 下一篇: SVN 分支主干的合并