1資料刪除策略
2定時刪除
3優點: 節約記憶體,到時就刪除,快速釋放不必要的記憶體占用
4缺點: cpu壓力很大,無論cpu此時負載量多高均占用cpu,會影響redis伺服器響應時間和指令吞吐量
5總結: 用處理器效能換取儲存空間
6惰性刪除
7資料到達過期時間,不做處理,等下次訪問該資料時再刪除
8如果示過期,返回資料
9發現已過期,刪除,返回不存在
10實現方法: 當獲取該資料時會自動呼叫expirefneeded()函式來實現此機制
11優點: 節約cpu效能,發現必須刪除的時候才刪除
12缺點: 記憶體壓力很大,出現長期占用記憶體的資料
13總結: 用儲存空間換取處理器效能
14定期刪除
15redis啟動伺服器初始化時,讀取配置server.hz的值,預設為10
16 每秒鐘執行server.hz次servercron()--->databasescron()--->activeexpirecycle()
17 activeexpirecycle對每個expires[*]逐一進行檢測,每次執行250ms/server.hz
18 對某個expires[*]檢測時,隨機挑選w個key檢測
19如果key超時,刪除key
20 如果一輪中刪除的key的數量》w*25%, 迴圈過程
21 如果一輪中刪除的key的數量<=w*25%,檢查下乙個expires[*],0-15資料庫迴圈
22 w取值=active_expire_cycle_lookups_per_loop屬性值
23 引數current_db用於記錄activeexpirecycle()進入哪個expires[*]執行
24如果activeexpirecycle()執行時間到期,下次從current_db繼續向下執行
2526
週期性輪詢redis庫中的時效笥資料,採用隨機抽取的策略,利用過期資料佔比的方式控制刪除資料
2728
特點1: cpu效能占用設定有峰值,檢測頻度可自定義設定
29特點2: 記憶體壓力不是很大,長期占用記憶體的冷資料會被持續清理
3031
總結: 週期性抽查儲存空間(隨機抽查,重點抽查)
3233
刪除策略比對
34 定時刪除 -- 節約記憶體,無占用 --不分時段占用cpu資源,頻度高
35 惰性刪除 -- 記憶體占用嚴重 --延時執行,cpu利用率高
36 定期刪除 -- 記憶體定期隨機清理 --每秒花費固定的cpu資源維護記憶體
3738
影響資料逐出的相關配置
39檢測易失資料(可能會過期的資料集server.db[i].expires)
40 volatile-lru: 挑選最近最少使用的資料淘汰
41 volatile-lfu: 挑選最近使用次數最少的資料淘汰
42 volatile-ttl: 挑選將要過期的資料淘汰
43 volatile-random: 任意選擇資料淘汰
4445
檢測全庫資料(所有資料集server.db[i].dict)
46 allkeys-lru: 挑選最近最少使用的資料淘汰
47 allkeys-lfu: 挑選最近使用次數最少的資料淘汰
48 allkeys-random: 任意選擇資料淘汰
4950
放棄資料驅逐
51noeviction(驅逐): 禁止驅逐資料(redis4.0中預設策略), 會引發錯誤oom(outofmemory)
52 maxmemory-policy voiatile-lru
Redis 過期刪除策略
過期時間判定 在redis內部,每當我們設定乙個鍵的過期時間時,redis就會將該鍵帶上過期時間存放到乙個過期字典中。當我們查詢乙個鍵時,redis便首先檢查該鍵是否存在過期字典中,如果存在,那就獲取其過期時間。然後將過期時間和當前系統時間進行比對,比系統時間大,那就沒有過期 反之判定該鍵過期。過期...
Redis 過期鍵刪除策略
當redis伺服器中的資料庫鍵超過過期時間,刪除策略主要為三種 惰性刪除 放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,過期的話,刪除該鍵 如果沒有過期,就返回該鍵。定期刪除 每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個資料...
Redis的過期刪除策略
過期策略 即redis針對過期的key使用的清除策略,策略為 定期刪除 惰性刪除。記憶體淘汰機制 即記憶體占用達到記憶體限制設定值時觸發的redis的淘汰策略來刪除鍵。下面是我對過期刪除策略和記憶體淘汰策略的對比 刪除策略和maxmemory關係 使用客戶端命令config set maxmemor...