成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Redis 緩存淘汰策略

Tecode / 2096人閱讀

摘要:但是內(nèi)存空間畢竟有限,隨著我們存儲數(shù)據(jù)的不斷增長,要緩存的數(shù)據(jù)量越來越大,當(dāng)超過了我們的內(nèi)存大小時,該怎么辦呢解決方法有兩種增加物理內(nèi)存搭建集群和緩存數(shù)據(jù)的淘汰機(jī)制。增加物理內(nèi)存簡單粗暴,價格十分昂貴,內(nèi)存的價格大約是萬元左右。

redis 使用的時內(nèi)存空間來存儲數(shù)據(jù)的,避免業(yè)務(wù)應(yīng)用從后端數(shù)據(jù)庫中讀取數(shù)據(jù),可以提升應(yīng)用的響應(yīng)速度。但是內(nèi)存空間畢竟有限,隨著我們存儲數(shù)據(jù)的不斷增長,要緩存的數(shù)據(jù)量越來越大,當(dāng)超過了我們的內(nèi)存大小時,該怎么辦呢?

解決方法有兩種:增加物理內(nèi)存、搭建 Redis 集群和緩存數(shù)據(jù)的淘汰機(jī)制。增加物理內(nèi)存簡單粗暴,價格十分昂貴,1TB 內(nèi)存的價格大約是 4 萬元左右。所以我們選擇緩存數(shù)據(jù)的淘汰機(jī)制。使用簡單來說,數(shù)據(jù)淘汰機(jī)制包括兩步:第一,根據(jù)一定的策略,篩選出對應(yīng)用訪問來說"不重要"的數(shù)據(jù);第二,將這些數(shù)據(jù)從緩存中刪除,為新來的數(shù)據(jù)騰出空間。

在 Redis 的配置文件redis.conf文件中,配置maxmemory的大小參數(shù)如下所示:

maxmemory 4gb
# 使用以下命令配置 maxmemory
CONFIG SET maxmemory 4gb

倘若實際的存儲中超出了 Redis 的配置參數(shù)的大小時,Redis 中有淘汰策略,把需要淘汰的 key 給淘汰掉,整理出干凈的一塊內(nèi)存給新的 key 值使用。

Redis 4.0 之前一共實現(xiàn)了 6 種內(nèi)存淘汰策略,在 4.0 之后,又增加了 2 種策略。我們可以按照是否會進(jìn)行數(shù)據(jù)淘汰把它們分成兩類:

  • 不進(jìn)行數(shù)據(jù)淘汰的策略,只有 noeviction 這一種。
  • 會進(jìn)行淘汰的 7 種其他策略。會進(jìn)行淘汰的 7 種策略,我們可以再進(jìn)一步根據(jù)淘汰候選數(shù)據(jù)集的范圍把它們分成兩類:

    • 在設(shè)置了過期時間的數(shù)據(jù)中進(jìn)行淘汰,包括 volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 后新增)四種。
    • 在所有數(shù)據(jù)范圍內(nèi)進(jìn)行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 后新增)三種。

image

規(guī)則規(guī)則說明
noeviction當(dāng)內(nèi)存不足以容納新寫入的數(shù)據(jù)時 新寫入操作會報錯
allkeys-lru當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時 在鍵空間中 移除最近最少使用的 key
allkeys-random當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時 在鍵空間中 隨機(jī)移除某個 key
volatile-lru當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時 在設(shè)置了過期時間的鍵空間中 移除最近最少使用的 key
nvolatile-lru當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時 在設(shè)置了過期時間的鍵空間中 移除最近最少使用的 key
volatile-ttl當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時 在設(shè)置了過期時間的鍵空間中 有更早過期時間的 key 優(yōu)先移除
  • volatile-ttl:表示在設(shè)置可過期時間的鍵值對中,根據(jù)過期時間的先后進(jìn)行淘汰數(shù)據(jù),越早被過期的數(shù)據(jù),越先被淘汰。
  • volatile-random:從名字可以看出來,就是在設(shè)置了過期時間的鍵值對中,隨機(jī)淘汰數(shù)據(jù)。
  • volatile-lru:會根據(jù) lru 算法進(jìn)行數(shù)據(jù)的淘汰
  • allkeys-random:在全部的鍵值對數(shù)據(jù)中,進(jìn)行數(shù)據(jù)的隨機(jī)淘汰。
  • allkeys-lru:在全部的鍵值對數(shù)據(jù)中,根據(jù) lru 算法進(jìn)行數(shù)據(jù)的淘汰。
  • allkeys-lfu:在全部的鍵值對數(shù)據(jù)中,根據(jù) lfu 算法進(jìn)行數(shù)據(jù)的淘汰。

默認(rèn)情況下,Redis 在使用的內(nèi)存空間超過 maxmemory 值時,并不會淘汰數(shù)據(jù),也就是設(shè)定的 noeviction 策略。對應(yīng)到 Redis 緩存,也就是指,一旦緩存被寫滿了,再有寫請求來時,Redis 不再提供服務(wù),而是直接返回錯誤。Redis 用作緩存時,實際的數(shù)據(jù)集通常都是大于緩存容量的,總會有新的數(shù)據(jù)要寫入緩存,這個策略本身不淘汰數(shù)據(jù),也就不會騰出新的緩存空間,我們不把它用在 Redis 緩存中。

例如,我們使用 EXPIRE 命令對一批鍵值對設(shè)置了過期時間后,無論是這些鍵值對的過期時間是快到了,還是 Redis 的內(nèi)存使用量達(dá)到了 maxmemory 閾值,Redis 都會進(jìn)一步按照 volatile-ttl、volatile-random、volatile-lru、volatile-lfu 這四種策略的具體篩選規(guī)則進(jìn)行淘汰。

  • volatile-ttl 在篩選時,會針對設(shè)置了過期時間的鍵值對,根據(jù)過期時間的先后進(jìn)行刪除,越早過期的越先被刪除。
  • volatile-random 就像它的名稱一樣,在設(shè)置了過期時間的鍵值對中,進(jìn)行隨機(jī)刪除。
  • volatile-lru 會使用 LRU 算法篩選設(shè)置了過期時間的鍵值對。
  • volatile-lfu 會使用 LFU 算法選擇設(shè)置了過期時間的鍵值對。

可以看到,volatile-ttl 和 volatile-random 篩選規(guī)則比較簡單,而 volatile-lru 因為涉及了 LRU 算法,所以我會在分析 allkeys-lru 策略時再詳細(xì)解釋。volatile-lfu 使用了 LFU 算法,我會在第 26 講中具體解釋,現(xiàn)在你只需要知道,它是在 LRU 算法的基礎(chǔ)上,同時考慮了數(shù)據(jù)的訪問時效性和數(shù)據(jù)的訪問次數(shù),可以看作是對淘汰策略的優(yōu)化。

相對于 volatile-ttl、volatile-random、volatile-lru、volatile-lfu 這四種策略淘汰的是設(shè)置了過期時間的數(shù)據(jù),allkeys-lru、allkeys-random、allkeys-lfu 這三種淘汰策略的備選淘汰數(shù)據(jù)范圍,就擴(kuò)大到了所有鍵值對,無論這些鍵值對是否設(shè)置了過期時間。它們篩選數(shù)據(jù)進(jìn)行淘汰的規(guī)則是:

  • allkeys-random 策略,從所有鍵值對中隨機(jī)選擇并刪除數(shù)據(jù);
  • allkeys-lru 策略,使用 LRU 算法在所有數(shù)據(jù)中進(jìn)行篩選。
  • allkeys-lfu 策略,使用 LFU 算法在所有數(shù)據(jù)中進(jìn)行篩選。

這也就是說,如果一個鍵值對被刪除策略選中了,即使它的過期時間還沒到,也需要被刪除。當(dāng)然,如果它的過期時間到了但未被策略選中,同樣也會被刪除。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/126009.html

相關(guān)文章

  • 緩存那些事

    摘要:分布式緩存應(yīng)用和緩存分離,緩存單獨作為一個系統(tǒng)單獨部署,多個應(yīng)用可以共享的訪問緩存。通過靜態(tài)變量一次獲取所有的數(shù)據(jù)緩存起來避免頻繁的讀取。類似的分布式緩存實現(xiàn)方案還有的集群方案,其實現(xiàn)思想和的實現(xiàn)思想大相徑庭。 0x01 前言 提到緩存,那么緩存是什么,為什么需要緩存? 如果知道一點點計算機(jī)方面的知識就會知道,計算機(jī)的構(gòu)造也是由多級緩存->硬盤一起來構(gòu)造計算機(jī)的數(shù)據(jù)存儲。當(dāng)然這里不是來...

    BigTomato 評論0 收藏0
  • 緩存那些事

    摘要:分布式緩存應(yīng)用和緩存分離,緩存單獨作為一個系統(tǒng)單獨部署,多個應(yīng)用可以共享的訪問緩存。通過靜態(tài)變量一次獲取所有的數(shù)據(jù)緩存起來避免頻繁的讀取。類似的分布式緩存實現(xiàn)方案還有的集群方案,其實現(xiàn)思想和的實現(xiàn)思想大相徑庭。 0x01 前言 提到緩存,那么緩存是什么,為什么需要緩存? 如果知道一點點計算機(jī)方面的知識就會知道,計算機(jī)的構(gòu)造也是由多級緩存->硬盤一起來構(gòu)造計算機(jī)的數(shù)據(jù)存儲。當(dāng)然這里不是來...

    Sike 評論0 收藏0
  • 關(guān)于redis的幾件小事(四)redis的過期策略以及內(nèi)存淘汰機(jī)制

    摘要:的過期策略是什么樣的采用了定期刪除惰性刪除的過期策略。定期刪除原理定期刪除指的是默認(rèn)每隔就隨機(jī)抽取一些設(shè)置了過期時間的,檢測這些是否過期,如果過期了就將其刪掉。所有只會抽取一部分而不會全部檢查。 1.數(shù)據(jù)為什么會過期? 首先,要明白redis是用來做數(shù)據(jù)緩存的,不是用來做數(shù)據(jù)存儲的(當(dāng)然也可以當(dāng)數(shù)據(jù)庫用),所以數(shù)據(jù)時候過期的,過期的數(shù)據(jù)就不見了,過期主要有兩種情況, ①在設(shè)置緩存數(shù)據(jù)時制定了...

    AbnerMing 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<