1. 程式人生 > 資料庫 >Redis學習筆記---Redis持久化機制

Redis學習筆記---Redis持久化機制

前言:

我們都知道計算機在執行的時候,資料存放有兩種方式,一種是存在記憶體,一種是存在硬碟上。
記憶體:高效,斷電(關機)記憶體資料會丟失
硬碟::讀寫速度慢於記憶體,斷電資料不會丟失

1. Redis使用的持久化機制(儲存資料的方式)

(1)RDB

1) RDB:是redis的預設持久化機制。 RDB相當於照快照,儲存的是一種狀態。如果你有幾十G資料 ,它能把它壓縮為 幾KB的快照
2)快照是預設的持久化方式,這種方式就是將記憶體中資料以快照的方式寫入到二進位制檔案中,在我們redis底層預設儲存的的檔名為 dump.rdb。
3) 優點:
快照儲存資料極快,還原資料快。
適用於災難備份

4) 缺點:
小記憶體機器不適合使用,RDB機制符合要求就會照快照
5) 快照產生的條件有以下兩種:
[1] 伺服器正常關閉是
通過命令列輸入: ./bin/redis-cli shutdown
[2] key滿足一定條件,會進行快照(這個在我們redis.conf有詳細說明)
以vim redis.conf進入該檔案,然後打上 /save
在這裡插入圖片描述
在這裡插入圖片描述

解釋說明:
save 900 1 // 每900秒(15分鐘)至少1個key發生變化,產生快照
save 300 10 // 每300秒(5分鐘)至少10個key發生變化,產生快照
save 60 1000 // 每60秒(1分鐘)至少10000個key發生變化,產生快照

(2)AOF

1)由於快照的方式是在一定間隔時間做一次的,所以如果redis意外down掉的話,就會丟失最後一次快照的所有修改。如果應用要求不能丟失任何修改的話,可以採用aof 持久化方式。

同樣式以vim redis.conf進入該檔案,並打上 /append (這裡就是進行搜尋)
在這裡插入圖片描述
2) Append-only file(aof): 從上面我們可以知道預設是沒有開啟的,這種aof比快照方式有更好的永續性,是由於在使用aof持久方式時,redis會將每一個收到的寫命令都通過write 函式追加到檔案中(預設是 appendonly.aof)。當redis重啟時會通過重新執行檔案中儲存的寫命令來在記憶體中重建整個資料庫的內容。

 # 如果我們要使用aof的方式,應該把它啟用
 appendonly yes  //啟用aof持久化方式
3) 進行儲存的三種方式(預設是:每秒fsync 一次)

在這裡插入圖片描述

appendfsync always  //收到寫命令就立即寫入磁碟,最慢,但是保證完全持久化
appendfsync everysec //每秒鐘寫入磁碟一次,在效能和持久化方面做了很好的折中
appendfsync no //完全依賴os,效能最好,持久化沒保證
4) 產生問題

aof 的方式也同時帶來了另一個問題。持久化檔案變的越來越大。例如我們呼叫incr test 命令100次,檔案中必須儲存全部的100條命令,其中有99條是多餘的。(aof比較消耗記憶體空間,而不是硬碟空間)