官網介紹:http://www.redis.io
Redis提供了2個不同形式的持久化方式。
RDB(Redis DataBase)AOF(Append Of File)
docker安裝redis
拉取redis鏡像,展示鏡像
docker pull redis:latest
docker images
創建myredis文件夾,在下面創建conf和data兩個子文件夾,用於映射docker redis中的redis.conf和data文件夾
mkdir -p myredis/{conf,data}
cd myredis/conf
wget http://download.redis.io/redis-stable/redis.conf
修改redis.conf文件,主要修改以下幾個地方
bind將這個注釋掉,保證redis可以遠程訪問requirepass設置密碼daemonize這個要注釋掉,不然docker容器起不來appendonly用於開啟AOF(Append-only file)默認是no,如果想開啟,改成yes即可。
再myredis路徑下,運行docker:
# home/sdz/myredis
docker run -d \
-p 6379:6379 \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
-v $PWD/data:/data --name myredis \
--restart=always \
--privileged=true \
redis redis-server /etc/redis/redis.conf
進入redis客戶端
docker exec -it myredis redis-cli
RDB(Redis DataBase)
定義
在指定的時間間隔內將內存中的數據集快照寫入磁盤, 即Snapshot快照,它恢復時是將快照文件直接讀到內存里。
流程
Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到 一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。 整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能 如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最后一次持久化后的數據可能丟失。

實戰
配置
在redis.conf中配置文件名稱,默認為dump.rdb。rdb文件的保存路徑,也可以修改。默認為Redis啟動時命令行所在的目錄下。docker上面配置了data目錄,會在那里顯示。
dbfilename dump.rdb


配置文件中默認的快照配置
格式:save 秒鍾 寫操作次數
RDB是整個內存的壓縮過的Snapshot,RDB的數據結構,可以配置復合的快照觸發條件,
默認是1分鍾內改了1萬次,或5分鍾內改了10次,或15分鍾內改了1次。
推薦:禁用,不設置save指令,或者給save傳入空字符串

命令
save :save時只管保存,其它不管,全部阻塞。手動保存。不建議。
bgsave:Redis會在后台異步進行快照操作,快照同時還可以響應客戶端請求。
可以通過lastsave 命令獲取最后一次成功執行快照的時間
redis.conf 其他相關配置
-
stop-writes-on-bgsave-error:當Redis無法寫入磁盤的話,直接關掉Redis的寫操作。推薦yes。 -
rdbcompression壓縮文件: 對於存儲到磁盤中的快照,可以設置是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。如果不想消耗CPU來進行壓縮的話,可以設置為關閉此功能。推薦yes。 -
rdbchecksum檢查完整性:在存儲快照后,還可以讓redis使用CRC64算法來進行數據校驗,但是這樣做會增加大約
10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能。推薦yes。
如何停止
動態停止RDB:redis-cli config set save "" save后給空值,表示禁用保存策略
rdb的備份
先通過config get dir 查詢rdb文件的目錄
將*.rdb的文件拷貝到別的地方
rdb的恢復
-
關閉
Redis -
先把備份的文件拷貝到工作目錄下
cp dump2.rdb dump.rdb -
啟動
Redis, 備份數據會直接加載
優勢
- 適合大規模的數據恢復
- 對數據完整性和一致性要求不高更適合使用
- 節省磁盤空間
- 恢復速度快
劣勢
Fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮- 雖然
Redis在fork時使用了寫時拷貝技術,但是如果數據龐大時還是比較消耗性能。 - 在備份周期在一定間隔時間做一次備份,所以如果
Redis意外down掉的話,就會丟失最后一次快照后的所有修改。
小結

AOF(Append Only File)
定義
以日志的形式來記錄每個寫操作(增量保存),將Redis執行過的所有寫指令記錄下來(讀操作不記錄), 只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis 重啟的話就根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。
流程
- 客戶端的請求寫命令會被
append追加到AOF緩沖區內; AOF緩沖區根據AOF持久化策略[always,everysec,no]將操作sync同步到磁盤的AOF文件中;AOF文件大小超過重寫策略或手動重寫時,會對AOF文件rewrite重寫,壓縮AOF文件容量;Redis服務重啟時,會重新load加載AOF文件中的寫操作達到數據恢復的目的;

實戰
AOF默認不開啟,可以在redis.conf中配置文件名稱,默認為 appendonly.aof
AOF文件的保存路徑,同RDB的路徑一致。
注意:AOF和RDB同時開啟,系統默認取AOF的數據(數據不會存在丟失)。
