RDB:
RDB持久化是把當前進程數據生成快照保存到硬盤的過程,Redis 默認的方式。
觸發機制:
1)save命令: 阻塞當前Redis服務器, 直到RDB過程完成爲止。
對於內存比較大的實例會造成長時間阻塞, 線上環境不建議使用。
2)bgsave命令: Redis進程執行fork操作創建子進程, RDB持久化過程由子進程負責, 完成後自動結束。
阻塞只發生在fork階段, 一般時間很短。持久化過程,主線程還可以執行命令
bgsave流程:
3)自動觸發: redis.conf中配置:
save 900 1
save 300 10
save 60 10000
##900s 內更改一次,就儲存; 300s 內更改了 10 次就儲存
其他自動觸發情況:
主從複製時,全量複製操作時
執行shutdown命令時,如果沒有開啓AOF持久化功能則自動執行bgsave
執行debug reload命令重新加載Redis時, 也會自動觸發save操作
二者區別:
RDB優缺點:
優點:RDB是一個緊湊壓縮的二進制文件,壓縮後的文件遠遠小於內存大小。
Redis加載RDB恢復數據遠遠快於AOF的方式。
缺點:耗時、耗性能 - - bgsave每次運行都要執行fork操作創建子進程, 屬於重量級操作, 頻繁執行成本過高
RDB不適合實時持久化。
AOF:
Redis持久化的主流方式,主要解決了數據持久化的實時性。
AOF配置: 配置redis.conf
appendonly yes //默認no,不開啓AOF
appendfilename //aof文件名,
dir ./ //aof文件目錄
appendfsync //同步策略
AOF工作流程:
寫入緩衝區的原因: 保證寫入速度(如果直接追加到硬盤, 那麼性能完全取決於當前硬盤負載)Redis可以提供多種緩衝區同步硬盤的策略, 在性能和安全性方面做出平衡
AOF緩衝區同步文件策略:
always: 每次寫入緩衝區的命令都調用fsync操作同步到AOF文件。
no: 不對AOF文件做fsync同步操作
everysec: Redis使用另一條線程每秒執行fsync同步操作,常用的同步硬盤的策略
AOF重寫作用:
減少磁盤佔用量、加速恢復速度
RDB與AOF:
參考:
有空還是看《Redis開發與運維》第5章吧