1. 程式人生 > >Redis過期策略、記憶體淘汰策略、持久化策略

Redis過期策略、記憶體淘汰策略、持久化策略

一、持久化策略

1.基本概念

 Redis的資料是存在記憶體中的,若redis宕機,資料就會全部丟失

(1)RDB快照,是一次全量備份,快照是記憶體資料的二進位制序列化形式,儲存上非常緊湊;

(2)AOF日誌,是連續的增量備份,AOF日誌記錄的是記憶體資料修改的指令記錄文字,當資料庫重啟時要載入AOF日誌進行指令重放,所以需要定期進行AOF重寫,對日誌進行瘦身。

2.怎麼進行備份的

(1)RDB通過Redis主程序fork子程序,讓子程序執行磁碟 IO 操作來進行 RDB 持久化,記錄的是資料;

(2)AOF日誌只記錄對記憶體進行修改的指令記錄,記錄的是指令。

3.要選擇哪種策略?

(1)只用RDB: RDB是隔一段時間進行備份,容易丟失很多資料;

(2)只用AOF: AOF沒有RDB恢復快且恢復複雜;

(3)Redis4.0使用混合持久化:將RDB檔案的內容和增量的AOF日誌儲存在一起。增量日誌指:自持久化開始到持久化結束的這段時間發生的增量 AOF 日誌。當在redis重啟時,先載入 rdb 的內容,然後再重放增量 AOF 日誌。替代之前的 AOF 全量檔案重放。

二、記憶體淘汰策略

1.noeviction :預設淘汰策略,不淘汰,如果記憶體已滿,新增資料是報錯。//eviction逐出

2.allkeys-lru:在所有鍵中,選取最近最少使用

的資料拋棄。

3.volatile-lru:在設定了過期時間的所有鍵中,選取最近最少使用的資料拋棄。//Least Recently Used

4.allkeys-random: 在所有鍵中,隨機拋棄。

5.volatile-random: 在設定了過期時間的所有鍵,隨機拋棄。//volatile不穩定,易變的

6.volatile-ttl:在設定了過期時間的所有鍵,拋棄存活時間最短的資料。//time  to live 生存時間

三、定期策略

1.定期刪除:Redis會將每個設定過期時間的key放入到一個獨立的字典,其會定期遍歷這個字典來刪除到期的key。

2.定期刪除策略(集中處理)

(1)預設每秒進行10次過期掃描(100ms一次),這種過期掃描採用了一種簡單的貪心策略,並不會遍歷過期字典中所有的key。

從過期字典中隨機 20 個 key;
刪除這 20 個 key 中已經過期的 key;
如果過期的 key 比率超過 1/4,那就重複步驟 1;

3.惰性刪除(零散處理)

是在客戶端訪問這個 key 的時候,redis 對 key 的過期時間進行檢查,如果過期了就立即刪除,不會給你返回任何東西。

4.為什麼採用定期刪除+惰性刪除的策略?

(1)只採用定期刪除,會導致很多過期的key並沒有被刪掉。

假設redis裡放了10萬個key,都設定了過期時間,你每隔幾百毫秒,就檢查10萬個key,那redis基本上就死了,cpu負載會很高的,消耗在你的檢查過期key上了。

(2)另外採用惰性刪除,保證過期的key一定會被刪除。

在你獲取某個key的時候,redis會檢查一下 ,這個key如果設定了過期時間那麼是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。