redis的過期策略和記憶體淘汰機制

2022-03-09 07:21:46 字數 1974 閱讀 4034

一、redis的過期策略和記憶體淘汰機制 

1、定期刪除+惰性刪除

定期刪除:指的是redis預設是每隔100ms就隨機抽取一些設定了過期時間的key,檢查其是否過期,如果過期就刪除

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

2、如果大量過期key堆積在記憶體裡,導致redis記憶體塊耗盡了,怎麼辦?

記憶體淘汰機制:

redis.conf中配置:

1# maxmemory-policy noeviction

noeviction:當記憶體使用達到閾值的時候,所有引起申請記憶體的命令會報錯。

allkeys-lru:在主鍵空間中,優先移除最近未使用的key。

volatile-lru:在設定了過期時間的鍵空間中,優先移除最近未使用的key。

allkeys-random:在主鍵空間中,隨機移除某個key。

volatile-random:在設定了過期時間的鍵空間中,隨機移除某個key。

volatile-ttl:在設定了過期時間的鍵空間中,具有更早過期時間的key優先移除。

二、手寫lru快取12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

publicclasslrucache

};

}

publicintget(intkey)

publicvoidput(intkey,intvalue)

}

linkedhashmap的原始碼說明 :

對於 linkedhashmap 而言,它繼承與 hashmap(public class linkedhashmapextends hashmapimplements map)、

底層使用雜湊表與雙向鍊錶來儲存所有元素。

linkedhashmap 中的 entry 整合與 hashmap 的 entry,但是其增加了 before 和 after 的引用,指的是上乙個元素和下乙個元素的引用12

3456

staticclassentryextendshashmap.node

}

初始化:

在 linkedhashmap 的構造方法中,實際呼叫了父類 hashmap 的相關構造方法來構造乙個底層存放的 table 陣列,但額外可以增加 accessorder 這個引數,如果不設定,預設為 false,代表按照插入順序進行迭代;當然可以顯式設定為 true,代表以訪問順序進行迭代12

3456

publiclinkedhashmap(intinitialcapacity,

floatloadfactor,

booleanaccessorder)

Redis的過期策略和記憶體淘汰策略

redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...

Redis的過期策略和記憶體淘汰策略

在redis中我們對於鍵可以通過expire key time設定生存時間,當time時間過後鍵就會過期,redis會採用過期策略對過期的鍵進行刪除。過期策略主要是在cpu和記憶體之間進行權衡。可以將cpu的處理效率作為側重點進行選擇策略,也可以將記憶體的容量作為側重點進行選擇策略實際上redis採...

Redis的過期策略和記憶體淘汰策略

我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 redis中同時使用了惰性過期和定期過期兩種過期策略。redis的記憶體淘汰策略是指在redis的...