Redis超強入門指南—持久化

持久化概述
持久化可以理解為存儲,就是將數(shù)據(jù)存儲到一個不會丟失的地方,如果把數(shù)據(jù)放在內(nèi)存中,電腦關閉或重啟數(shù)據(jù)就會丟失,所以放在內(nèi)存中的數(shù)據(jù)不是持久化的,而放在磁盤就算是一種持久化。
Redis 的數(shù)據(jù)存儲在內(nèi)存中,內(nèi)存是瞬時的,如果 linux 宕機或重啟,又或者 Redis 崩潰或重啟,所有的內(nèi)存數(shù)據(jù)都會丟失,為解決這個問題,Redis 提供兩種機制對數(shù)據(jù)進行持久化存儲,便于發(fā)生故障后能迅速恢復數(shù)據(jù)。
視頻觀看戳??????

(1)?RDB?方式
1.?什么是 RDB?方式?
Redis?Database(RDB),就是在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,數(shù)據(jù)恢復時將快照文件直接再讀到內(nèi)存。
RDB 保存了在某個時間點的數(shù)據(jù)集(全部數(shù)據(jù))。存儲在一個二進制文件中,只有一個文件。默認是 dump.rdb。RDB 技術非常適合做備份,可以保存最近一個小時,一天,一個月的全部數(shù)據(jù)。保存數(shù)據(jù)是在單獨的進程中寫文件,不影響 Redis 的正常使用。RDB 恢復數(shù)據(jù)時比其他 AOF 速度快。
2.?如何實現(xiàn)?
RDB 方式的數(shù)據(jù)持久化,僅需在 redis.conf 文件中配置即可,默認配置是啟用的。
在配置文件 redis.conf 中搜索 SNAPSHOTTING,查找在注釋開始和結束之間的關于 RDB
的配置說明。配SNAPSHOTTING 置地方有三處。
①:配置執(zhí)行RDB 生成快照文件的時間策略。
對 Redis 進行設置,讓它在“ N 秒內(nèi)數(shù)據(jù)集至少有M 個 key 改動”這一條件被滿足時, 自動保存一次數(shù)據(jù)集。
配置格式: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 ?文件,修改前先備份,執(zhí)行?cp redis.conf bak_redis.conf

查看默認啟用的RDB 文件

③:編輯redis.conf 增加 save 配置,修改文件名等。vim redis.conf

修改的內(nèi)容:


把原來的默認的 dump.rdb 刪除,修改 redis.conf 后,重新啟動redis
④:在 20 秒內(nèi)容,修改三個 key 的值

⑤:查看生成的rdb 文件

3. 總結
優(yōu)點:由于存儲的是數(shù)據(jù)快照文件,恢復數(shù)據(jù)很方便,也比較快
缺點:
1)會丟失最后一次快照以后更改的數(shù)據(jù)。如果你的應用能容忍一定數(shù)據(jù)的丟失,那么使用rdb 是不錯的選擇;如果你不能容忍一定數(shù)據(jù)的丟失,使用 rdb 就不是一個很好的選擇。?
2)由于需要經(jīng)常操作磁盤,RDB 會分出一個子進程。如果你的 redis 數(shù)據(jù)庫很大的話,子進程占用比較多的時間,并且可能會影響?Redis??暫停服務一段時間(millisecond??級別),如果你的數(shù)據(jù)庫超級大并且你的服務器 CPU 比較弱,有可能是會達到一秒。
?
(2)?AOF?方式
1.?什么是 AOF?方式
Append-only?File(AOF),Redis?每次接收到一條改變數(shù)據(jù)的命令時,它將把該命令寫到一個?AOF?文件中(只記錄寫操作,讀操作不記錄),當?Redis?重啟時,它通過執(zhí)行?AOF?文件中所有的命令來恢復數(shù)據(jù)。
2.?如何實現(xiàn)
AOF 方式的數(shù)據(jù)持久化,僅需在 redis.conf 文件中配置即可配置項:
①:appendonly:默認是 no,改成 yes 即開啟了 aof 持久化
②:appendfilename:指定 AOF 文件名,默認文件名為 appendonly.aof
③:dir :指定RDB 和 AOF 文件存放的目錄,默認是 ./
④:appendfsync:配置向 aof 文件寫命令數(shù)據(jù)的策略:
no:不主動進行同步操作,而是完全交由操作系統(tǒng)來做(即每 30 秒一次),比較快但不是很安全。
always:每次執(zhí)行寫入都會執(zhí)行同步,慢一些但是比較安全。
everysec:每秒執(zhí)行一次同步操作,比較平衡,介于速度和安全之間。這是默認項。
⑤:auto-aof-rewrite-min-size:允許重寫的最小 AOF 文件大小,默認是 64M 。當 aof 文件大于 64M 時,開始整理 aof 文件,去掉無用的操作命令??s小 aop 文件。
例 1:
①:停止運行的redis?,備份要修改的redis.conf
②:查看redis?安裝目錄/src?下有無?.aof?文件。默認是在redis?的當前目錄

③:編輯 redis.conf
設置 appendonly 為 yes 即可。查看 appendfsync 的當前策略。查看 appendfilname 的文件名稱


④:在 redis 客戶端執(zhí)行寫入命令

⑤:查看 aof 文件


(3)?總結
1)?append-only?文件是另一個可以提供完全數(shù)據(jù)保障的方案;
2)?AOF?文件會在操作過程中變得越來越大。比如,如果你做一百次加法計算,最后你只會在數(shù)據(jù)庫里面得到最終的數(shù)值,但是在你的 AOF?里面會存在 100?次記錄,其中 99?條記錄對最終的結果是無用的;但 Redis?支持在不影響服務的前提下在后臺重構 AOF?文件,讓文件得以整理變小?
3)?可以同時使用這兩種方式,redis?默認優(yōu)先加載aof?文件(aof?數(shù)據(jù)最完整);
?
如果想更深入的學習Redis,奉上Redis視頻教程,視頻學習效果更佳,走過路過別忘素質(zhì)三連哦~~

