一、RDB持久化
(一)、RDB介紹
可以在指定的時間間隔內生成數據集的 時間點快照(point-in-time snapshot),新快照會覆蓋老快照
(二)、優點
壓縮格式,恢復速度快,適合于用做備份,主從復制也是基于RDB持久化功能實現的
(三)、缺點
不是實時的,會有數據丟失,操作比較重量
(四)、原理

(五)、配置方法
第一步:修改配置文件
vim /data/6379/redis.conf
#添加
dir /data/6379 #持久化文件存儲位置
dbfilename dump.rdb #RDB持久化數據文件
save 900 1 #900秒內如果有一次變更則進行一次持久化
save 300 10 #300秒內如果有10次變更則進行一次持久化
save 60 10000 #60秒內如果有10000次變更則進行一次持久化
第二步:重新啟動redis
redis-cli -a 123456 shutdown
redis-server /data/6379/redis.conf
注意事項
1、沒配置save參數時
1.shutdown/pkill/kill都不會持久化保存
2.可以手動執行bgsave
3、配置save參數時
1.shutdown/pkill/kill均會自動觸發bgsave持久化保存數據
2.pkill -9 不會觸發持久化
3、恢復時
1.持久化數據文件名要和配置文件里定義的一樣才能被識別
2.RDB文件只有一個數據文件,遷移和備份只要這一個RDB文件即可
二、AOF持久化
(一)、AOF介紹
AOF(append-only log file):記錄服務器執行的所有寫操作命令,并在服務器啟動時,通過重新執行這些命令來還原數據集
AOF 文件中的命令全部以 Redis 協議的格式來保存,新命令會被追加到文件的末尾
(二)、優點
可以最大程度保證數據不丟
(三)、缺點
日志記錄量級比較大,持久化時間較長
(四)、原理

(五)、配置方法
第一步:修改配置文件
vim /data/6379/redis.conf
#添加
appendonly yes #開啟AOF持久化
appendfilename "redis.aof" #持久化存儲文件
appendfsync always #每次操作成功都執行一次持久化
#或者 建議設置
appendfsync everysec #每秒鐘提交一次持久化
#或者
appendfsync no #不進行持久化
第二步:重啟redis
redis-cli -a 123456 shutdown
redis-server /data/6379/redis.conf
(六)、AOF重寫機制
1、重寫機制原理
(1)redis主進程通過fork創建子進程
(2)子進程根據當前redis內存中的數據生成數據庫重建命令序列到臨時文件中
(3)父進程繼承client的新請求,把請求中的寫操作繼續追加至原來的AOF文件(而不是直接寫入臨 時文件,避免寫操作失敗帶來的問題);額外地,這些新的寫請求還會被放置于一個緩沖隊列中
(4)子進程重寫完成,會通知父進程,父進程把緩沖中的命令寫到臨時文件中
(5)父進程將臨時文件替換掉舊的AOF文件
2、重寫機制注意事項
和RDB一樣,如果當前的數據量巨大,那么創建子進程的過程會很耗時。
在大數據的處理工作中,文件的刪除也是一項比較麻煩的工作。
像我們普通的筆記本電腦,刪除一個幾GB的文件都是一項很耗時的工作,
更何況大數據的量級遠遠大過我們日常使用的數據。
所以在替換aof文件時,如果舊的aof很大,刪除它也是一個很耗時的過程。
當然這并不是aof或者redis的缺點,只是可能會出現的一個客觀情況

AOF注意事項
1.aof修復命令不要?,因為他的修復?案?常粗暴,??切,從出錯的地?到最后全部刪除
2.任何操作之前,先備份數據
三、redis 持久化方式有哪些?有什么區別?
rdb:基于快照的持久化,速度更快,一般用作備份,主從復制也是依賴于rdb持久化功能
aof:以追加的方式記錄redis操作日志的文件。可以最大程度的保證redis數據安全,類似于mysql的binlog
四、save bgsave 區別?
共同點:都能實現redis持久化功能。
不同點:
SAVE: 前臺,阻塞redis正常寫入,直到持久化完成。
BGSAVE:后臺,開啟子線程,異步的持久化功能,不會阻塞redis正常寫入。
五、AOF和RDB如何選擇
1.開啟混合模式
2.開啟aof
3.不開啟rdb
4.rdb采?定時任務的?式定時備份
5.可以從庫開啟RDB進?備份