redis的記憶體維護策略

2021-10-10 10:26:37 字數 1612 閱讀 2246

lfulru與lfu差別:

redis作為優秀的中間快取件,時常會儲存大量的資料,即使採取了集群部署來動態擴容,也應該即使的整理記憶體,維持系統效能。

redis官方也給出警告,當記憶體不足時,redis會根據配置的快取策略淘汰大部分keys,以保證寫入成功。當無淘汰策略時或沒有找到合適的key時,redis直接返回out of memory錯誤。

設定超時時間,超過規定時間就會過期

expire key seconds   //設定key的有效時間,單位為秒

ttl tey //獲取key的剩餘有效時間,持久化key返回-1,key不存在返回-2,具體時間返回秒數

persist key //設定有時效性的key為持久key

lru(the least recently used,最近最久未使用演算法)

lru:記憶體管理的一種頁面置換演算法,對於在記憶體中但又不用的資料塊(記憶體塊)叫做lru,作業系統會根據哪些資料屬於lru而將其移出記憶體而騰出空間來載入另外的資料。

lru演算法的思想

如果乙個資料在最近一段時間沒有被訪問到,那麼可以認為在將來它被訪問的可能性也很小。因此,當空間滿時,最久沒有訪問的資料最先被置換(淘汰)

1、volatile-lru:

設定超時時間的資料中,刪除最不常使用的資料.

2、allkeys-lru:

查詢所有的key中最近最不常使用的資料進行刪除,這是應用最廣泛的策略.

3、volatile-random:

在已經設定了超時的資料中隨機刪除.

4、allkeys-random:

查詢所有的key,之後隨機刪除.

5、volatile-ttl:

查詢全部設定超時時間的資料,之後排序,將馬上將要過期的資料進行刪除操作.

6、noeviction:

如果設定為該屬性,則不會進行刪除操作,如果記憶體溢位則報錯返回.

7、volatile-lfu

從所有配置胃過期時間的鍵中驅逐使用頻率最少的鍵

8、allkeys-lfu

從所有鍵中驅逐使用頻率最少的鍵

lfu(least frequently used ,最近最少使用演算法)也是一種常見的快取演算法。(注重頻率)

lfu演算法是redis4.0裡面新加的一種淘汰策略。它的核心思想是根據key的最近被訪問的頻率進行淘汰,很少被訪問的優先被淘汰,被訪問的多的則被留下來。

lfu演算法能更好的表示乙個key被訪問的熱度。假如使用的是lru演算法,乙個key很久沒有被訪問到,只剛剛是偶爾被訪問了一次,那麼它就被認為是熱點資料,不會被淘汰,而有些key將來是很有可能被訪問到的則被淘汰了。如果使用lfu演算法則不會出現這種情況,因為使用一次並不會使乙個key成為熱點資料。

lfu演算法的思想是:

如果乙個資料在最近一段時間很少被訪問到,那麼可以認為在將來它被訪問的可能性也很小。因此,當空間滿時,最小頻率訪問的資料最先被淘汰。

1、lru是最近最少使用頁面置換演算法(least recently used),也就是首先淘汰最長時間未被使用的頁面

2、lfu是最近最不常用頁面置換演算法(least frequently used),也就是淘汰一定時期內被訪問次數最少的頁面

Redis中的記憶體維護策略

redis作為優秀的中間快取件,時常會儲存大量的資料,即使採取了集群部署來動態擴容,也應該即使的整理記憶體,維持系統效能。在redis中有兩種解決方案,一是為資料設定超時時間,二是採用lru演算法動態將不用的資料刪除。記憶體管理 的一種頁面置換演算法,對於在記憶體中但又不用的 資料塊 記憶體塊 叫做...

redis記憶體管理與維護

expire key time 以秒為單位 常用方式 setx string key int seconds,string value 字串獨有方式查詢當前key的有效期 ttl key 如果返回值為 1 表示key永久有效 返回值為 2表示失效,從記憶體中銷毀lru是記憶體管理的一種頁面置換演算法...

Redis的記憶體淘汰策略

記憶體淘汰策略分類 早期版本的 redis 有以下 6 種淘汰策略 noeviction 不淘汰任何資料,當記憶體不足時,新增操作會報錯,redis 預設記憶體淘汰策略 allkeys lru 淘汰整個鍵值中最久未使用的鍵值 allkeys random 隨機淘汰任意鍵值 volatile lru ...