redis的過期淘汰策略

2021-10-19 22:58:29 字數 660 閱讀 1507

被動過期

只有當訪問乙個key時才判斷是否過期,過期就進行清除。

節省cpu,但是浪費記憶體

定期過期

每隔一段時間進行掃瞄,清除過期的key

對記憶體和cpu都比較友好

可是如果key沒有新增過期時間,則redis中資料會越來越多,把redis佔滿,所以需要使用淘汰策略來清理掉一些資料,保證新插入的資料可以儲存

lru:最近最少使用。

redis並沒有使用雙向鍊錶來實現lru。redis整體上是乙個大的dict,key是乙個string,而value都會儲存為乙個robj,robj物件中有乙個lru屬性,儲存了時間戳,越大代表使用時間與當前越接近。redis採用隨機取樣的方式,預設取5個,可以通過配置修改,然後放入乙個pool中,根據lru值排序,清除掉最小值。當第二次清除時,取樣五個,只有比pool最小的lru值小的資料才會繼續放入pool中,然後清除最小值

lfu:

因為lru並不是真正的lru,使用lfu有更多的機會清除最不常用的key。lfu是在lru欄位上記錄時間和訪問頻率。也是採用隨機取樣,一次取樣10個,最低的進行淘汰

random:隨機

每一種策略都有兩種形式:volatile,針對設定了ttl的key;allkeys,針對所有key

Redis 過期策略 和 淘汰策略

適用於 很多的 key 可能會到了過期時間還沒有進行刪除的情況。放任 key 過期不管,但是每次從鍵空間中獲取 key 時,都檢查取得的 key 是否過期,如果過期的話,就刪除該 key 如果沒有過期,就返回該 key 每隔一段時間程式就對資料庫進行一次檢查,刪除裡面的過期的 key 至於要刪除多少...

Redis 資料過期淘汰策略

redis經常被用來作為快取資料庫,有很多資料都是臨時快取一下,可能用過之後很久都不會再用到了,如果不進行處理,那麼快取資料堆積會導致記憶體洩漏,然後系統奔潰。setex string key,int seconds,string value 字串獨有的方式 expire key seconds 將...

Redis的 過期策略 和 淘汰策略

惰性過期 被動淘汰 定期過期 redis 中同時使用了惰性過期和定期過期兩種過期策略 redis中定期過期策略演算法大致實現 redis.config中hz定義了servercron任務的執行週期,預設為10,即cpu空閒時每秒執行10次 每次過期key清理的時間不超過cpu時間的25 即若hz 1...