溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis中內(nèi)存淘汰策略和過期鍵刪除策略的示例分析

發(fā)布時間:2021-09-15 12:57:08 來源:億速云 閱讀:130 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Redis中內(nèi)存淘汰策略和過期鍵刪除策略的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

redis是我們現(xiàn)在最常用的一個工具,幫助我們建設(shè)系統(tǒng)的高可用,高性能。

而且我們都知道redis是一個完全基于內(nèi)存的工具,這也是redis速度快的一個原因,當(dāng)我們往redis中不斷緩存數(shù)據(jù)的時候,其內(nèi)存總有滿的時候(而且內(nèi)存是很貴的東西,盡量省著點用),所以盡可能把有用的數(shù)據(jù),或者使用頻繁的數(shù)據(jù)緩存在redis中,物盡其用。

那么如果正在使用的redis內(nèi)存用完了,我們應(yīng)該怎么取舍redis中已存在的數(shù)據(jù)和即將要存入的數(shù)據(jù)呢,我們要怎么處理呢?

redis官方提供了8種不同的淘汰策略

redis.conf 是個好東西,幾乎redis的所有配置都可以在這里找到,根據(jù)conf中的說明也就能操作了

Redis中內(nèi)存淘汰策略和過期鍵刪除策略的示例分析

我們看下redis.conf中關(guān)于8中淘汰策略的說明(本文使用redis版本是4.0.9)

volatile-lru -> Evict using approximated LRU among the keys with an expire set.
allkeys-lru -> Evict any key using approximated LRU.
volatile-lfu -> Evict using approximated LFU among the keys with an expire set.
allkeys-lfu -> Evict any key using approximated LFU.
volatile-random -> Remove a random key among the ones with an expire set.
allkeys-random -> Remove a random key, any key.
volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
noeviction -> Don't evict anything, just return an error on write operations.

# LRU means Least Recently Used(最近最少使用的,時間)
# LFU means Least Frequently Used(最不經(jīng)常使用的,次數(shù))
# The default is:
maxmemory-policy noeviction

上文是從redis.conf中摘出來關(guān)于淘汰策略的8種配置以及設(shè)置說明,其中maxmemory-policy noeviction 代表了淘汰策略默認(rèn)的是noeviction,我們可以根據(jù)自己的業(yè)務(wù)需求修改合適的策略。
英文看不懂的看下面的中文

8種淘汰策略

  • volatile-lru:在設(shè)置過期時間的數(shù)據(jù)中淘汰最少使用的數(shù)據(jù)。

  • allkeys-lru:在所有的數(shù)據(jù)中淘汰最少使用的數(shù)據(jù)。

  • volatile-lfu:在設(shè)置過期時間的數(shù)據(jù)中淘汰使用頻率最低的數(shù)據(jù)。

  • allkeys-lfu:在所有的數(shù)據(jù)中淘汰使用使用頻率最低的數(shù)據(jù)。

  • volatile-random:在設(shè)置過期時間的數(shù)據(jù)中淘汰任意隨機(jī)數(shù)據(jù)。

  • allkeys-random:在所有的數(shù)據(jù)中隨機(jī)淘汰數(shù)據(jù)。

  • volatile-ttl:在設(shè)置過期時間的數(shù)據(jù)中淘汰最早過期的數(shù)據(jù)。

  • noeviction:默認(rèn)策略,不淘汰數(shù)據(jù),新增或者修改數(shù)據(jù)會拋異常,但是讀操作正常進(jìn)行,不受影響

上面是內(nèi)存不足的淘汰策略,還有一種是過期鍵的刪除策略,兩者是不同,不要搞混了

過期鍵的刪除策略

  • 定時過期:每個設(shè)置過期時間的key都需要創(chuàng)建一個定時器,到過期時間就會立即清除。該策略可以立即清除過期的數(shù)據(jù),對內(nèi)存很友好;但是會占用大量的CPU資源去處理過期的數(shù)據(jù),從而影響緩存的響應(yīng)時間和吞吐量。

  • 惰性過期:只有當(dāng)訪問一個key時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節(jié)省CPU資源,卻對內(nèi)存非常不友好。極端情況可能出現(xiàn)大量的過期key沒有再次被訪問,從而不會被清除,占用大量內(nèi)存。

  • 定期過期:每隔一定的時間,會掃描一定數(shù)量的數(shù)據(jù)庫的expires字典中一定數(shù)量的key,并清除其中已過期的key。該策略是前兩者的一個折中方案。通過調(diào)整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和內(nèi)存資源達(dá)到最優(yōu)的平衡效果。

expires字典會保存所有設(shè)置了過期時間的key的過期時間數(shù)據(jù),其中,
key是指向鍵空間中的某個鍵的指針,
value是該鍵的毫秒精度的UNIX時間戳表示的過期時間。
鍵空間是指該Redis集群中保存的所有鍵。

感謝各位的閱讀!關(guān)于“Redis中內(nèi)存淘汰策略和過期鍵刪除策略的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI