1. 程式人生 > >Redis學習筆記(一)-持久化

Redis學習筆記(一)-持久化

snap -m rdb持久化 缺點 tro truncate only ont sync

一、RDB持久方式

RDB持久化是把當前進程的數據已快照的形式保存到硬盤的過程。

觸發方式:

1、手動觸發命令:save和bgsave

save:阻塞式,內存較大的實例在執行過程中會造成長時間的阻塞,影響主進程上的正常服務請求。

bgsavefork子進程,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文件末尾。

開啟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

執行流程:

  1. 主進程fork子進程執行rewrite,開銷等同bgsave;
  2. fork子進程完成後,主進程繼續響應其他命令,此時在保證原有AOF機制正確執行外,額外將新命令追加到一個重寫緩沖區內(子進程只共享fork時的內存數據,新追加的數據臨時保存在重寫緩沖區)
  3. 子進程根據內存快照重寫命令道新的AOF文件。
  4. 子進程重寫結束後發送信號給主進程,主進程接收到信號更新統計信息,並將重寫緩沖區內命令追加到新的AOF文件;
  5. 替換舊的AOF文件;

優缺點

優點:

  • 支持秒級數據持久化;
  • AOF文件可讀性高,易於分析;
  • 兼容性高,可用於不同版本redis

缺點:

  • 文件大,恢復速度慢。
  • 對文件寫數據頻率較高,IO壓力大

Redis學習筆記(一)-持久化