rdb持久化配置java
# 時間策略,表示900s內若是有1條是寫入命令,就觸發產生一次快照,能夠理解爲就進行一次備份 save 900 1 save 300 10 # 表示300s內有10條寫入,就產生快照 save 60 10000 # redis servercron 相似於linux的crontab,默認每隔100毫秒執行一次 # 文件名稱 dbfilename dump.rdb # 若是持久化出錯,主進程是否中止寫入 stop-writes-on-bgsave-error yes # 是否壓縮 rdbcompression yes # 導入時是否檢查 rdbchecksum yes # 文件保存路徑 dir /usr/local/redis-4.0.6
save的含義linux
實際生產環境每一個時段的讀寫請求確定不是均衡的,爲此redis提供一種根據key單位時間操做次數來觸發一次備份到磁盤,咱們能夠自由定製什麼狀況下觸發備份,此功能起到平衡性能與數據安全的做用redis
在Redis中RDB持久化的觸發分爲兩種:本身手動觸發與Redis定時觸發shell
而自動觸發的場景主要是有如下幾點數據庫
save m n
配置規則自動觸發bgsave
debug reload
時shutdown
時,若是沒有開啓aof,也會觸發禁用RDB安全
AOF持久化配置服務器
# 是否開啓aof appendonly yes # 文件名稱 appendfilename "appendonly.aof" # 同步方式 appendfsync everysec # aof重寫期間是否同步 no-appendfsync-on-rewrite no # 重寫觸發配置 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 加載aof時若是有錯如何處理 aof-load-truncated yes # yes表示若是aof尾部文件出問題,寫log記錄並繼續執行。no表示提示寫入等待修復後寫入 # 文件重寫策略 aof-rewrite-incremental-fsync yes
appendfsync 同步模式有三種模式,通常狀況下都採用 everysec 配置,在數據和安全裏面作平衡性選擇,最多損失1s的數據app
always:把每一個寫命令都當即同步到aof,很慢,可是很安全函數
everysec:每秒同步一次,是折中方案性能
no:redis不處理交給OS來處理,很是快,可是也最不安全
AOF的整個流程大致來看能夠分爲兩步,一步是命令的實時寫入(若是是 appendfsync everysec
配置,會有1s損耗),第二步是對aof文件的重寫。
步驟:
緣由:
AOF持久化的效率和安全性分析
always:每一個時間事件循環都將AOF_BUF緩衝區的全部內容寫入到AOF文件,而且同步AOF文件,這是最安全的方式,但磁盤操做和阻塞延遲,是IO開支較大。 everysec:每秒同步一次,性能和安全都比較中庸的方式,也是redis推薦的方式。若是遇到物理服務器故障,有可能致使最近一秒內aof記錄丟失(可能爲部分丟失)。 no:redis並不直接調用文件同步,而是交給操做系統來處理,操做系統能夠根據buffer填充狀況/通道空閒時間等擇機觸發同步;這是一種普通的文件操做方式。性能較好,在物理服務器故障時,數據丟失量會因OS配置有關。處於no模式下的flushAppendOnlyFile調用無須執行同步操做
Redis提供了不一樣的持久性選項:
RDB的優缺點
AOF的優缺點
優勢:
缺點:
AOF文件一般比同一數據集的等效RDB文件大
根據確切的fsync策略,AOF可能比RDB慢
RDB 和 AOF ,我應該用哪個?
通常來講,若是想達到足以媲美 PostgreSQL 的數據安全性, 你應該同時使用兩種持久化功能。若是你很是關心你的數據,但仍然能夠承受數分鐘之內的數據丟失, 那麼你能夠只使用 RDB 持久化。有不少用戶都只使用 AOF 持久化, 但咱們並不推薦這種方式: 由於定時生成 RDB 快照(snapshot)很是便於進行數據庫備份, 而且 RDB 恢復數據集的速度也要比 AOF 恢復的速度要快
在線上咱們到底該怎麼作?
RDB持久化與AOF持久化同步使用
若是Redis中的數據並非特別敏感或者能夠經過其它方式重寫生成數據,能夠關閉持久化,若是丟失數據能夠經過其它途徑補回;
本身制定策略按期檢查Redis的狀況,而後能夠手動觸發備份、重寫數據;
採用集羣和主從同步