Redis過時策略、內存淘汰策略、持久化策略

1、持久化策略redis

1.基本概念數據庫

 Redis的數據是存在內存中的,若redis宕機,數據就會所有丟失dom

(1)RDB快照,是一次全量備份,快照是內存數據的二進制序列化形式,存儲上很是緊湊;spa

(2)AOF日誌,是連續的增量備份,AOF日誌記錄的是內存數據修改的指令記錄文本,當數據庫重啓時要加載AOF日誌進行指令重放,因此須要按期進行AOF重寫,對日誌進行瘦身。日誌

2.怎麼進行備份的code

(1)RDB經過Redis主進程fork子進程,讓子進程執行磁盤 IO 操做來進行 RDB 持久化,記錄的是數據;進程

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

3.要選擇哪一種策略?io

(1)只用RDB: RDB是隔一段時間進行備份,容易丟失不少數據;ast

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

(3)Redis4.0使用混合持久化:將RDB文件的內容和增量的AOF日誌保存在一塊兒。增量日誌指:自持久化開始到持久化結束的這段時間發生的增量 AOF 日誌。當在redis重啓時,先加載 rdb 的內容,而後再重放增量 AOF 日誌。替代以前的 AOF 全量文件重放。

2、內存淘汰策略

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 生存時間

3、按期策略

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若是設置了過時時間那麼是否過時了?若是過時了此時就會刪除,不會給你返回任何東西。