1.定時刪除
在設定key的過期時間的同時,為該key建立乙個定時器,讓定時器在key的過期時間來臨時,對key進行刪除
優點:保證記憶體被盡快釋放
缺點:1)若過期key很多,刪除這些key會占用很多的cpu時間,在cpu時間緊張的情況下,cpu不能把所有的時間用來做要緊的事兒,還需要去花時間刪除這些key。
2)定時器的建立耗時,若為每乙個設定過期時間的key建立乙個定時器(將會有大量的定時器產生),效能影響嚴重
3)沒人用
2.惰性刪除
key過期的時候不刪除,每次從資料庫獲取key的時候去檢查是否過期,若過期,則刪除,返回null。
優點:刪除操作只發生在從資料庫取出key的時候發生,而且只刪除當前key,所以對cpu時間的占用是比較少的,而且此時的刪除是已經到了非做不可的地步.
缺點:若大量的key在超出超時時間後,很久一段時間內,都沒有被獲取過,那麼可能發生記憶體洩露(無用的垃圾占用了大量的記憶體)
3.定期刪除
每隔一段時間執行一次刪除過期key操作
優點:1)通過限制刪除操作的時長和頻率,來減少刪除操作對cpu時間的占用--處理"定時刪除"的缺點
2)定期刪除過期key--處理"惰性刪除"的缺點
缺點:1)在記憶體友好方面,不如"定時刪除"
2)在cpu時間友好方面,不如"惰性刪除"
惰性刪除+定期刪除
惰性刪除流程:在進行get或setnx等操作時,先檢查key是否過期,若過期,刪除key,然後執行相應操作;若沒過期,直接執行相應操作
定期刪除流程:遍歷每個資料庫,檢查當前庫中的指定個數個key(預設是每個庫檢查20個key,注意相當於該迴圈執行20次,迴圈體時下邊的描述),如果當前庫中沒有乙個key設定了過期時間,直接執行下乙個庫的遍歷,
隨機獲取乙個設定了過期時間的key,檢查該key是否過期,如果過期,刪除key,判斷定期刪除操作是否已經達到指定時長,若已經達到,直接退出定期刪除。
Redis 過期刪除策略
過期時間判定 在redis內部,每當我們設定乙個鍵的過期時間時,redis就會將該鍵帶上過期時間存放到乙個過期字典中。當我們查詢乙個鍵時,redis便首先檢查該鍵是否存在過期字典中,如果存在,那就獲取其過期時間。然後將過期時間和當前系統時間進行比對,比系統時間大,那就沒有過期 反之判定該鍵過期。過期...
Redis的過期刪除策略
過期策略 即redis針對過期的key使用的清除策略,策略為 定期刪除 惰性刪除。記憶體淘汰機制 即記憶體占用達到記憶體限制設定值時觸發的redis的淘汰策略來刪除鍵。下面是我對過期刪除策略和記憶體淘汰策略的對比 刪除策略和maxmemory關係 使用客戶端命令config set maxmemor...
Redis 過期鍵刪除策略
當redis伺服器中的資料庫鍵超過過期時間,刪除策略主要為三種 惰性刪除 放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,過期的話,刪除該鍵 如果沒有過期,就返回該鍵。定期刪除 每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個資料...