Redis Persistence 之 redis database
1、關於redis持久化問題,看看官網文檔:
註:redis提供了多種不同方式的持久化選項:
RDB(即 redis database)持久化表現在特定的時間間隔內某一個時間點的快照。可以理解為,在指定時間間隔內將內存中的數據集快照寫入磁盤,也就是常說的snapshot快照,它恢復時是將快照文件直接讀入內存中。
AOF持久性地記錄在服務器中的所有寫操作命令,並且在服務器重新啟動時執行這些操作命令。(關於AOF會在下一篇博文中介紹。)
補充說明:(redis設置連接數據庫密碼的操作命令)
註:使用 config set requirepass "密碼" 可以設置或者修改連接密碼,可以看到,設置連接密碼後,立即生效,在下次操作數據庫時,需要輸入連接密碼(auth 連接密碼)
2、RDB 的詳細說明:
Redis 首先會創建一個子程序(fork)來進行持久化,會先將數據寫入到一個臨時文件中,待持久化過程結束後,在用這個臨時文件替換上次持久化好的文件。在整個過程中,主進程是不會進行任何IO操作的,這就確保了極高的性能。
如果需要進行大規模數據的恢復,且對於數據恢復的完整行不是很樂觀,那RDB方式需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最後一次持久化後的數據可能會丟失。
fork的作用: 復制一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等)數值都和原進程一致,但是是一個全新的進程,並作為原進程的子進程。
概念說了這麽多,來看看操作:(註意要開兩個終端分別操作)
a、在 redis.conf 配置信息 的那篇博文中已經說到過 save的問題,這裏在補充說明一下。 SNAPSHOTTING 為快照,可以看到,當設置為 save "" ,是不進行快照的。(圖示中被註釋了)如果設置為 save 120 10,意味著在120秒鐘內,如果有10個 key 被刪除、修改或者新增,redis會自動把 DB 保存到磁盤中。
b、 可以看到,在 2分鐘內,我保存了14個key,redis在2分鐘後,自動在指定目錄下生成一個 dump.rdb文件。
註意:(自己犯的一個錯誤)因為在 path 路徑下配置了 redis ,所以在那一個目錄中啟動 redis 都是沒有問題的。DB 默認保存的 文件名為 dump.rdb,它會被保存在你所啟動 redis 後臺服務器的目錄下。如圖示,如果在輸入 su - 命令後啟動,就直接在 /root 目錄下。
c、這裏進行數據的備份,將dump.rdb備份,改名為dump_db.rdb
d、然後在 redis 中進行清空操作,再關閉服務
註: 在操作中發現,fluahsall之後,dump.rdb的創建時間發生改變,也就是說,redis用一個空 dump.rdb 文件覆蓋了源文件。
e、重新啟動redis,使用 keys *,發現原數據並不存在。(也可以理解,在flushall之後,dump.rdb文件已經被覆蓋,redis 從磁盤中讀取到內存中的是一個空文檔)。
f、再次關閉redis,使用 cp命令拷貝dump_db.rdb 覆蓋 dump.rdb 文件,再次啟動redis,發現數據已經存在。
註: 這裏只找回了10 條數據,和配置文件中的 save 配置一致,也就是說,使用RDB在發生異常時,可能會導致在最後一次保存到磁盤中時數據可能會部分丟失。
附: 在執行 save 操作時,dump.rdb文件也會被覆蓋。
bgsave 操作與 save 操作的區別在於:
save 時只管保存,其他不管,全部阻塞。
而basave,redis會在後臺異步進行快照操作,快照同時還可以響應客戶端請求。使用lastsave 命令還可以獲得最後成功執行快照的時間。
3、補充關於 RDB 在 redis.conf 配置文件上的相關信息:
a、Stop-writes-on-bgsave-error: 在 savebg操作失敗時,停止寫操作。如果配置為no,表示你不在乎數據的一致性或者有其他方式解決這一問題。
b、rdbcompression: 對於存儲在磁盤中的快照,是否進行壓縮保存。如果是,使用 LZF 算法進行壓縮保存。如果你不想消耗 CPU 來進行此操作,可以關閉該功能。
c、rdbchecksum: 在存儲快照後,還可以讓redis使用CRC64算法來進行數據校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉該功能。
4、RDB 性能總結:
優勢: 1、適合大規模的數據恢復
2、對數據完整性和一致性要求不高
劣勢: 1、在一定時間間隔做數據備份,如果redis意外蕩機,就會丟失最後一次快照後的所有修改。
2、Fork的時候,內存中的數據被克隆了一遍,大致2倍的膨脹性需要考慮。
本文出自 “12392717” 博客,請務必保留此出處http://12402717.blog.51cto.com/12392717/1924462
Redis Persistence 之 redis database