国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Redis 緩存淘汰策略

Tecode / 2084人閱讀

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

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

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

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

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

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

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

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

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

image

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

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

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

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

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/126009.html

相關文章

  • 緩存那些事

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

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

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

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

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

    AbnerMing 評論0 收藏0

發表評論

0條評論

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