redis的持久化機制

懶惰的小妖發表於2020-09-28

Redis提供兩種持久化機制,一種RDB持久化(預設)

另一種是AOF(append only file)持久化。

RDB是什麼?

原理是redis會單獨建立(fork)一個與當前程式一模一樣的子程式來進行持久化,這個子程式的所有資料(變數,環境變數,程式計數器等)都和原程式一模一樣,會先將資料寫入到一個臨時檔案中,待持久化結束了,再用這個臨時檔案替換上次持久化好的檔案,整個過程中,主程式不進行任何的io操作,這就確保了極高的效能。

1.1這個持久化檔案在哪裡?

持久化檔案:dump.rdb在redis.conf配置檔案中定義的;一般情況下我們會給定一個檔案儲存。

dir ./ 當前資料夾,所以dump.rdb就會在myredis資料夾下生成;如果在不同的檔案下生成dump.rdb ,eg:第一次在myredis檔案下生成的dump.rdb下有10萬條資料,第二次啟動的時候在opt資料夾下啟動,opt檔案下會生成新的dump.rdb檔案,這個時候檔案是空的,這種情況下容易造成資料丟失,為了防止資料丟失,在dir 下指定檔案eg:dir /myredis(自行指定)

1.2他什麼時候fork子程式,或者什麼時候觸發rdb持久化機制

1.2.1shutdown時,如果沒有開啟aof,會觸發。(正常操作可以,)

1.2.2配置檔案中預設的快照配置

 900秒中,redis增刪改操作是否有1次,只要有一次就觸發rdb持久化機制

300秒鐘,redis增刪改操作是否有10次,只要總和有超過10次就觸發rdb持久化機制

60秒鐘,redis增刪改操作是否有10000次,只要總和超過10000次就觸發rdb持久化機制

1.2.3執行命令save(主程式)或者bgsave ,save是隻管儲存,其他不管,全部阻塞; bgsave:redis會在後臺非同步進行快照操作,同時可以響應客戶端的請求執行flushall命令,但是裡面是空的,無意義。 

 bgsave是專門做持久化的,持久化結束,這個程式也就結束。

2.AOF是什麼?預設是關閉的。redis.conf配置檔案中修改appendonly  yes

擴充:快速定位;vim redis.conf開啟檔案後,直接 /,之後輸入需要搜尋到的值,eg:/append; 按回車,游標找到所有的指定的字元 ,按 n 按鈕是下一個。 

原理是將Redis的操作檔案以追加的方式寫入檔案,讀操作是不記錄的

2.1這個持久化檔案在哪裡?

與rdb的持久化檔案一樣,都在redis.conf中dir  ./檔案下配置

2.2觸發機制(根據配置檔案配置項)

no:表示等作業系統進行資料快取同步到磁碟(快,持久化沒保證)

always:同步持久化,每次發生資料變更時,立即記錄到磁碟(慢,安全)

everysec:表示每秒同步一次(預設值,很快,但可能會丟失一秒以內的資料)

總結:

1.redis提供了RDB持久化方案,為什麼還要AOF?

優化資料丟失問題,rdb會丟失最後一次快照的資料,AOF丟失不會超過2秒的資料。

2.如果AOF和RDB同時存在,聽誰的?

AOF

3.RDB和AOF優勢劣勢?

RDB適合大規模的資料恢復,對資料完整性和一致性不高,在一定間隔時間做一次備份,如果Redis意外down掉的話,就會丟失最後一次快照後的所有操作。

AOF根據配置項而定

官方建議,兩種持久化機制同時開啟,如果兩個同時開啟,優先使用AOF持久化機制。

相關文章