眾所周知,redis是記憶體資料庫,它把資料儲存在記憶體中,這樣在加快讀取速度的同時也對資料安全性產生了新的問題,即當redis所在伺服器發生宕機後,redis資料庫裡的所有資料將會全部遺失。
為了解決這個問題,redis提供了持久化功能。通俗的講就是將記憶體中的資料寫入硬碟。
Redis 提供了多種不同層級的持久化方式:
1、RDB 持久化可以在指定的時間間隔內產生資料集的時間點快照(point-in-time snapshot)。
2、AOF 持久化記錄伺服器執行的所有寫入操作命令,並在伺服器啟動時,透過重新執行這些命令來還原資料集。 AOF 檔案中的指令全部以 Redis 協定的格式來儲存,新指令會被追加到檔案的結尾。 Redis 也可以在背景對 AOF 檔案進行重寫(rewrite),使得 AOF 檔案的體積不會超出保存資料集狀態所需的實際大小。
3、Redis 還可以同時使用 AOF 持久化和 RDB 持久化。在這種情況下, 當 Redis 重新啟動時, 它會優先使用 AOF 檔案來還原資料集, 因為 AOF 檔案保存的資料集通常比 RDB 檔案所保存的資料集更完整。
4、關閉持久化功能,。讓資料只存在記憶體裡面,重啟就沒了。
Redis的RDB持久化(RDB預設是啟動的)
#1.Snapshotting:
缺省情況下,Redis會將資料集的快照dump到dump.rdb檔。此外,我們也可以透過設定檔來修改Redis伺服器dump快照的頻率,在開啟redis.conf檔之後,我們搜尋save,可以看到下面的設定資訊:
save 900 1 #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump記憶體快照。
save 300 10 #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump記憶體快照。
save 60 10000 #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。
2. Dump快照的機制:
1). Redis先fork子程序。
2).子程序將快照資料寫入到臨時RDB檔案。
3). 當子程序完成資料寫入操作後,再用暫存檔案取代舊的檔案。
以上是redis預設持久化是否開啟的詳細內容。更多資訊請關注PHP中文網其他相關文章!