持久化概述
持久化可以理解為存儲,就是將數據存儲到一個不會丟失的地方,如果把數據放在內存中,電腦關閉或重啟數據就會丟失,所以放在內存中的數據不是持久化的,而放在磁盤就算是一種持久化。
Redis 的數據存儲在內存中,內存是瞬時的,如果 linux 宕機或重啟,又或者 Redis 崩潰或重啟,所有的內存數據都會丟失,為解決這個問題,Redis 提供兩種機制對數據進行持久化存儲,便于發生故障后能迅速恢復數據。
● RDB 方式
A、什么是 RDB 方式?
Redis Database(RDB),就是在指定的時間間隔內將內存中的數據集快照寫入磁盤,數據恢復時將快照文件直接再讀到內存。
RDB 保存了在某個時間點的數據集(全部數據)。存儲在一個二進制文件中,只有一個文件。默認是 dump.rdb。RDB 技術非常適合做備份,可以保存最近一個小時,一天,一個月的全部數據。保存數據是在單獨的進程中寫文件,不影響 Redis 的正常使用。RDB 恢復數據時比其他 AOF 速度快。
B、 如何實現?
RDB 方式的數據持久化,僅需在 redis.conf 文件中配置即可,默認配置是啟用的。
在配置文件 redis.conf 中搜索 SNAPSHOTTING, 查找在注釋開始和結束之間的關于 RDB的配置說明。配 SNAPSHOTTING 置地方有三處。
①:配置執行 RDB 生成快照文件的時間策略。
對 Redis 進行設置, 讓它在“ N 秒內數據集至少有 M 個 key 改動”這一條件被滿足時, 自動保存一次數據集。
配置格式:save <seconds> <changes> save 900 1
save 300 10
save 60 10000
②:dbfilename:設置 RDB 的文件名,默認文件名為 dump.rdb
③:dir:指定 RDB 文件的存儲位置,默認是 ./ 當前目錄
配置步驟:
①:查看 ps -ef | grep redis ,如果 redis 服務啟動,先停止。
②:修改 redis.conf 文件, 修改前先備份,執行 cp redis.conf bak_redis.conf
查看默認啟用的 RDB 文件
③:編輯 redis.conf 增加 save 配置, 修改文件名等。vim redis.conf
修改的內容:
把原來的默認的 dump.rdb 刪除,修改 redis.conf 后,重新啟動 redis
④:在 20 秒內容,修改三個 key 的值
⑤:查看生成的 rdb 文件
C、 總結
優點:由于存儲的是數據快照文件,恢復數據很方便,也比較快缺點:
1)會丟失最后一次快照以后更改的數據。如果你的應用能容忍一定數據的丟失,那么使用 rdb 是不錯的選擇;如果你不能容忍一定數據的丟失,使用 rdb 就不是一個很好的選擇。
2)由于需要經常操作磁盤,RDB 會分出一個子進程。如果你的 redis 數據庫很大的話, 子進程占用比較多的時間,并且可能會影響 Redis 暫停服務一段時間(millisecond 級別),如果你的數據庫超級大并且你的服務器 CPU 比較弱,有可能是會達到一秒。
● AOF 方式
A、什么是 AOF 方式
Append-only File(AOF),Redis 每次接收到一條改變數據的命令時,它將把該命令寫到一個 AOF 文件中(只記錄寫操作,讀操作不記錄),當 Redis 重啟時,它通過執行 AOF 文件中所有的命令來恢復數據。
B、 如何實現
AOF 方式的數據持久化,僅需在 redis.conf 文件中配置即可配置項:
①:appendonly:默認是 no,改成 yes 即開啟了 aof 持久化
②:appendfilename:指定 AOF 文件名,默認文件名為 appendonly.aof
③:dir : 指定 RDB 和 AOF 文件存放的目錄,默認是 ./
④:appendfsync:配置向 aof 文件寫命令數據的策略:
no:不主動進行同步操作,而是完全交由操作系統來做(即每 30 秒一次),比較快但不是很安全。
always:每次執行寫入都會執行同步,慢一些但是比較安全。
everysec:每秒執行一次同步操作,比較平衡,介于速度和安全之間。這是默認項。
⑤:auto-aof-rewrite-min-size:允許重寫的最小 AOF 文件大小,默認是 64M 。當 aof 文件大于 64M 時,開始整理 aop 文件, 去掉無用的操作命令??s小 aop 文件。
例 1:
①:停止運行的 redis , 備份要修改的 redis.conf
②:查看 redis 安裝目錄/src 下有無 .aof 文件。 默認是在 redis 的當前目錄
③:編輯 redis.conf
設置 appendonly 為 yes 即可。
查看 appendfsync 的當前策略。
查看 appendfilname 的文件名稱
④:在 redis 客戶端執行 寫入命令
⑤ 查看 aof 文件
● 總結
append-only 文件是另一個可以提供完全數據保障的方案;
2.AOF 文件會在操作過程中變得越來越大。比如,如果你做一百次加法計算,最后你只會在數據庫里面得到最終的數值,但是在你的 AOF 里面會存在 100 次記錄,其中 99 條記錄對最終的結果是無用的;但 Redis 支持在不影響服務的前提下在后臺重構 AOF 文件,讓文件得以整理變小
3.可以同時使用這兩種方式,redis 默認優先加載 aof 文件(aof 數據最完整);