(一)Redis 4.0 混合持久化
重啟Redis時,我們很少使用RDB來恢復內存狀態,因為會丟失大量數據。我們通常使用AOF日志重放。
但是重放AOF日志性能相對RDB來說要慢很多,這樣在Redis實例很大的情況下,啟動需要花費很長的時間。
Redis4.0 為了解決這個問題,帶來了一個新的持久化選項 --- 混合持久化。
通過如下配置可以開啟混合持久化(必須先開啟AOF)
# aof‐use‐rdb‐preamble yes
如果開啟了混合持久化,AOF在重寫時,不再是單純將內存數據轉換為RESP命令寫入AOF文件,而是將重寫這一刻之前的內存做RDB快照處理
並且將RDB快照內容和增量的AOF修改內存數據的命令存在一起,都寫入新的AOF文件,新的文件一開始不叫appendonly.aof,等到重寫完新的AOF文件
才會進行改名,覆蓋原有的AOF文件,完成新舊兩個AOF文件的替換。
於是在Redis重啟的時候,可以先加載RDB的內容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重啟效率大幅得到提升
Redis 數據備份策略
1 寫crontab 定時調度腳本,每小時copy一份rdb或aof的備份到一個目錄中去,僅僅保留最近48小時的備份
2 每天都保留一份當日的數據備份到一個目錄中去,可以保留最近一個月的備份
3 每次copy備份的時候,都把太舊的備份給刪了
4 每天晚上將當前機器上的備份復制一份到其他機器上,以防機器損壞
(二) Redis 主從架構
(三)Redis 主從工作原理
如果你為master配置了一個slave,不管這個slave是否是第一次連接上Master,它都會發送一個PSYNC命令給master請求復制數據。
master收到PSYNC命令后,會在后台進行數據持久化通過bgsave生成最新的rdb快照文件,持久化期間,master會繼續接受客戶端的請求,
他會把這些可能修改的數據集的請求緩存在內存中,當持久化進行完畢以后,master會把這份rdb文件數據集發送給slave,slave會把接收到的數據進行持久化生成rdb,然后在加載到內存中。
然后,master再將之前緩存在內存中的命令發送給slave.
當master與slave之間的連接由於某些原因而斷開時,slave能夠自動重連Master,如果master收到了多個slave並發連接請求,他只會進行一次持久化,而不是一個連接一次,然后再把這一份
持久化的數據發送給多個並發連接的slave
主從復制流程圖:
人生岔路口
如何進行選擇