Redis學習筆記(一)-持久化
阿新 • • 發佈:2019-02-13
snap -m rdb持久化 缺點 tro truncate only ont sync
AOF文件末尾。
一、RDB持久方式
RDB持久化是把當前進程的數據已快照的形式保存到硬盤的過程。
觸發方式:
1、手動觸發命令:save和bgsave
save:阻塞式,內存較大的實例在執行過程中會造成長時間的阻塞,影響主進程上的正常服務請求。
bgsave:fork子進程,RDB持久化的過程在子進程中進行,完成後自動結束進程,並通知主進程。阻塞發生在fork階段,時間較短。
2、自動觸發:滿足RDB持久化條件後會自動執行持久化過程。
- 相關配置:
################# SNAPSHOTTING ####################
# 觸發自動保存條件 # save <seconds> <changes>
# save <秒> <修改次數>
# 900s有一次改變觸發一次持久化
save 900 1
save 300 10
save 60 10000
# 設置保存快照失敗時,是否停止redis命令寫入
# 默認開啟,拒絕所有寫操作,保證內存和持久化數據一致
stop-writes-on-bgsave-error yes
# 是否在導出.rdb文件時采用LZC壓縮
rdbcompression yes
#是都開啟CRC64校驗
rdbchecksum yes
# 保存數據庫的文件名稱
dbfilename dump.rdb
# 保存數據庫的文件所在目錄 dir ./
########################################
- 從節點執行全量復制操作。
- 執行debug reload命令。
- shutdown命令,若未開啟aof自定執行bgsave
持久化失敗的可能原因:fork子進程內存不足,或rdb所在文件夾沒有寫權限。
優缺點:
優點:
- 保存了某個時間點的數據,適合備份;
- 與AOF相比,恢復大數據集效率更高;
缺點:
- 非實時備份,redis宕機時會丟失部分數據;
- 數據大時,fork子進程比較耗時,會阻塞客戶端響應;
- RDB文件需滿足特定格式,兼容性差;
二、AOF持久化方式
AOF持久化是通過保存redis服務器執行的寫命令來記錄數據庫狀態。即當redis執行了寫命令,該命令就會被追加到
開啟AOF持久化:
1 ############################## APPEND ONLY MODE ###############################
# 開啟aof,默認關閉 appendonly yes
# 保持的文件名
appendfilename "appendonly.aof"
# 同步策略
# always 每次有新命令,就將緩沖區寫入同步到AOF文件
# everysec(默認) 每秒寫入並同步
# no 同步操作交給操作系統
appendfsync everysec
# 重寫時是否繼續寫AOF文件(開啟IO性能會影響redis性能)
no-appendfsync-on-rewrite no
# 是否忽略最後一條可能存在問題的命令(宕機會導致數據不完整)
aof-load-truncated yes
#################################################################################
執行流程:
1、命令追加到AOF緩沖區(減少硬盤IO開銷);
2、緩沖區根據不同策略將數據同步到硬盤;
3、定期重寫AOF文件,達到壓縮目的;
AOF重寫:
觸發方式:
1、手動觸發:執行bgrewriteaof命令。
2、自動觸發:當配置的條件同時滿足時,自動執行AOF重寫。
# AOF文件當前大小/上次重寫時大小,默認比值100,即當前大小是基準大小的2倍
auto-aof-rewrite-percentage 100
# AOF文件的最小體積,默認64MB
auto-aof-rewrite-min-size 64mb
執行流程:
- 主進程fork子進程執行rewrite,開銷等同bgsave;
- fork子進程完成後,主進程繼續響應其他命令,此時在保證原有AOF機制正確執行外,額外將新命令追加到一個重寫緩沖區內(子進程只共享fork時的內存數據,新追加的數據臨時保存在重寫緩沖區)
- 子進程根據內存快照重寫命令道新的AOF文件。
- 子進程重寫結束後發送信號給主進程,主進程接收到信號更新統計信息,並將重寫緩沖區內命令追加到新的AOF文件;
- 替換舊的AOF文件;
優缺點
優點:
- 支持秒級數據持久化;
- AOF文件可讀性高,易於分析;
- 兼容性高,可用於不同版本redis;
缺點:
- 文件大,恢復速度慢。
- 對文件寫數據頻率較高,IO壓力大
Redis學習筆記(一)-持久化