官網介紹: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
的數據(數據不會存在丟失)。