Redis-11-持久化詳解
Redis-11-持久化
conf檔案中相關配置
# 如果900s內,如果至少有一個1 key進行了修改,我們及進行持久化操作
save 900 1
# 如果300s內,如果至少10 key進行了修改,我們及進行持久化操作
save 300 10
# 如果60s內,如果至少10000 key進行了修改,我們及進行持久化操作
save 60 10000
# 我們之後學習持久化,會自己定義這個測試!
stop-writes-on-bgsave-error yes # 持久化如果出錯,是否還需要繼續工作!
dir ./ # rdb 檔案儲存的目錄!
RDB(Redis DataBase)
在主從複製中,rdb就是備用了!從機上面!
1.conf中配置
rdbcompression yes # 是否壓縮 rdb 檔案,需要消耗一些cpu資源!
rdbchecksum yes # 儲存rdb檔案的時候,進行錯誤的檢查校驗!
2.原理
rdb儲存的是dump.rdb 都是在我們的配置檔案中快照中進行配置的!
在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,也就是行話講的Snapshot快照,它恢復時是將快 照檔案直接讀到記憶體裡。 Redis會單獨建立(fork)一個子程式來進行持久化,會先將資料寫入到一個臨時檔案中,待持久化過程 都結束了,再用這個臨時檔案替換上次持久化好的檔案。整個過程中,主程式是不進行任何IO操作的。 這就確保了極高的效能。如果需要進行大規模資料的恢復,且對於資料恢復的完整性不是非常敏感,那 RDB方式要比AOF方式更加的高效。RDB的缺點是最後一次持久化後的資料可能丟失。我們預設的就是 RDB,一般情況下不需要修改這個配置!
有時候在生產環境我們會將這個檔案進行備份
3.觸發機制
1、save的規則滿足的情況下,會自動觸發rdb規則
2、執行 flushall 命令,也會觸發我們的rdb規則!
3、退出redis,也會產生 rdb 檔案!
備份就自動生成一個 dump.rdb
4.如果恢復rdb檔案!
1、只需要將rdb檔案放在我們redis啟動目錄就可以,redis啟動的時候會自動檢查dump.rdb 恢復其中 的資料! 2、檢視需要存在的位置
127.0.0.1:6379> config get dir
1) "dir"
2) "/usr/local/bin" # 如果在這個目錄下存在 dump.rdb 檔案,啟動就會自動恢復其中的資料
5.優點:
1、適合大規模的資料恢復! dump.rdb
2、對資料的完整性要不高!
6.缺點:
1、需要一定的時間間隔進行操作!如果redis意外當機了,這個最後一次修改資料就沒有的了!
2、fork程式的時候,會佔用一定的內容空間
AOF(Append Only File)
將我們的所有命令都記錄下來,history,恢復的時候就把這個檔案全部在執行一遍!
預設是不開啟的,我們需要手動進行配置!我們只需要將 appendonly 改為yes就開啟了 aof! 重啟,redis 就可以生效了
如果這個 aof 檔案有錯誤,這時候 redis 是啟動不起來的嗎,我們需要修復這個aof檔案
redis 給我們提供了一個工具 **redis-check-aof **
redis-check-aof --fix appendonly.aof
1.相關配置
appendonly no#預設是不開啟aof模式的,預設是使用rdb方式持久化的,在大部分所有的情況下,rdb完全夠用!
appendfilename "appendonly.aof" # 持久化的檔案的名字
# appendfsync always # 每次修改都會 sync。消耗效能
appendfsync everysec # 每秒執行一次 sync,可能會丟失這1s的資料!
# appendfsync no # 不執行 sync,這個時候作業系統自己同步資料,速度最快!
#rewrite 重寫
2.原理
以日誌的形式來記錄每個寫操作,將Redis執行過的所有指令記錄下來(讀操作不記錄),只許追加檔案 但不可以改寫檔案,redis啟動之初會讀取該檔案重新構建資料,換言之,redis重啟的話就根據日誌檔案 的內容將寫指令從前到後執行一次以完成資料的恢復工作
Aof儲存的是 appendonly.aof 檔案 記錄所有的寫操作
3.重寫規則說明
aof 預設就是檔案的無限追加,檔案會越來越大
如果 aof 檔案大於 64m,太大了! fork一個新的程式來將我們的檔案進行重寫!
4.優點:
1、每一次修改都同步,檔案的完整會更加好!
2、每秒同步一次,可能會丟失一秒的資料
3、從不同步,效率最高的!
5.缺點:
1、相對於資料檔案來說,aof遠遠大於 rdb,修復的速度也比 rdb慢!
2、Aof 執行效率也要比 rdb 慢,所以我們redis預設的配置就是rdb持久化
擴充套件:
1、RDB 持久化方式能夠在指定的時間間隔內對你的資料進行快照儲存
2、AOF 持久化方式記錄每次對伺服器寫的操作,當伺服器重啟的時候會重新執行這些命令來恢復原始 的資料,AOF命令以Redis 協議追加儲存每次寫的操作到檔案末尾,Redis還能對AOF檔案進行後臺重 寫,使得AOF檔案的體積不至於過大。
3、只做快取,如果你只希望你的資料在伺服器執行的時候存在,你也可以不使用任何持久化
4、同時開啟兩種持久化方式
- 在這種情況下,當redis重啟的時候會優先載入AOF檔案來恢復原始的資料,因為在通常情況下AOF 檔案儲存的資料集要比RDB檔案儲存的資料集要完整。
- RDB 的資料不實時,同時使用兩者時伺服器重啟也只會找AOF檔案,那要不要只使用AOF呢?作者 建議不要,因為RDB更適合用於備份資料庫(AOF在不斷變化不好備份),快速重啟,而且不會有 AOF可能潛在的Bug,留著作為一個萬一的手段。
5、效能建議
- 因為RDB檔案只用作後備用途,建議只在Slave上持久化RDB檔案,而且只要15分鐘備份一次就夠 了,只保留 save 900 1 這條規則。
- 如果Enable AOF ,好處是在最惡劣情況下也只會丟失不超過兩秒資料,啟動指令碼較簡單隻load自 己的AOF檔案就可以了,代價一是帶來了持續的IO,二是AOF rewrite 的最後將 rewrite 過程中產 生的新資料寫到新檔案造成的阻塞幾乎是不可避免的。只要硬碟許可,應該儘量減少AOF rewrite 的頻率,AOF重寫的基礎大小預設值64M太小了,可以設到5G以上,預設超過原大小100%大小重 寫可以改到適當的數值。
- 如果不Enable AOF ,僅靠 Master-Slave Repllcation 實現高可用性也可以,能省掉一大筆IO,也 減少了rewrite時帶來的系統波動。代價是如果Master/Slave 同時倒掉,會丟失十幾分鐘的資料, 啟動指令碼也要比較兩個 Master/Slave 中的 RDB檔案,載入較新的那個,微博就是這種架構。
相關文章
- Redis 持久化詳解Redis持久化
- Redis 持久化儲存詳解Redis持久化
- 詳解 ZooKeeper 資料持久化持久化
- Redis 持久化之 AOF 配置詳解Redis持久化
- 【Redis】Redis 持久化之 RDB 與 AOF 詳解Redis持久化
- Redis持久化、主從與哨兵架構詳解Redis持久化架構
- kubernetes資料持久化PV-PVC詳解(一)持久化
- [動圖演示]Redis 持久化 RDB/AOF 詳解與實踐Redis持久化
- Redis高可用詳解:持久化技術及方案選擇Redis持久化
- Redis資料持久化—RDB持久化與AOF持久化Redis持久化
- MQTT 持久會話與 Clean Session 詳解MQQT會話Session
- redis系列:RDB持久化與AOF持久化Redis持久化
- 詳細分析Redis的持久化操作——RDB與AOFRedis持久化
- Hibernate註解(一)之持久化實體持久化
- redis持久化相關引數解釋Redis持久化
- 工作流中的資料持久化詳解!Activiti框架中JPA的使用分析持久化框架
- 詳解Redis持久化(持久化高危漏洞利用與多種對抗方案、RDB、AOF、同步手動持久化、非同步手動非阻塞持久化、備份檢測、備份修復、壓縮原理、雙備份模式、純快取模式)Redis持久化非同步模式快取
- redisaof持久化Redis持久化
- redis持久化Redis持久化
- Docker 持久化Docker持久化
- Redis 持久化Redis持久化
- [Redis]持久化Redis持久化
- Redis - 持久化Redis持久化
- SpringCloud使用Sentinel,Sentinel持久化,Sentinel使用nacos持久化SpringGCCloud持久化
- 圖解 Redis | 不就是 AOF 持久化嘛圖解Redis持久化
- [Kubernetes]5. k8s叢集StatefulSet詳解,以及資料持久化(SC PV PVC)K8S持久化
- Redis:持久化篇Redis持久化
- redis-持久化Redis持久化
- redis 之 持久化Redis持久化
- 可持久化trie持久化
- Redis 七 持久化Redis持久化
- Redis 持久化方案Redis持久化
- redis ——AOF持久化Redis持久化
- redis 持久化策略Redis持久化
- Redis的持久化Redis持久化
- Redis 持久化(Persistence)Redis持久化
- Redis 的持久化Redis持久化
- RDD持久化,不使用RDD持久化的問題的工作原理持久化