目錄
Redis快取的淘汰策略
noeviction 策略
根據過期時間的淘汰策略
所有資料範圍內的淘汰策略
關於LRU演算法
使用建議
首頁 資料庫 Redis 淺析Redis快取中的8種淘汰策略

淺析Redis快取中的8種淘汰策略

Nov 08, 2021 am 10:04 AM
redis 淘汰策略 快取

這篇文章帶大家來聊聊Redis快取中的8種淘汰策略,看看該怎麼使用它們,希望對大家有幫助!

淺析Redis快取中的8種淘汰策略

我們知道Redis快取使用記憶體來保存數據,但記憶體大小畢竟有限,隨著要快取的資料量越來越大,有限的快取空間不可避免地會被寫滿。這時候就需要快取的淘汰策略去刪除資料。 【相關推薦:Redis影片教學

Redis快取的淘汰策略

Redis的淘汰策略,根據是否會進行資料淘汰可以把它們分成兩類:

  • 不進行資料淘汰的策略,只有noeviction 這一種。
  • 會進行淘汰的 7 種其他策略。

會進行淘汰的7 種策略,我們可以再進一步根據淘汰候選資料集的範圍把它們分成兩類:

  • 在設定了過期時間的資料中進行淘汰,包括volatile-random、volatile-ttl、volatile-lru、volatile-lfu(Redis 4.0 後新增)四種。

  • 在所有資料範圍內進行淘汰,包括 allkeys-lru、allkeys-random、allkeys-lfu(Redis 4.0 後新增)三種。

淺析Redis快取中的8種淘汰策略

在redis3.0之前,預設是volatile-lru;在redis3.0之後(包括3.0),預設淘汰策略則是noeviction

noeviction 策略

noeviction表示不淘汰數據,當快取資料滿了,有新的寫入請求進來, Redis不再提供服務,而是直接回傳錯誤。

根據過期時間的淘汰策略

volatile-random、volatile-ttl、volatile-lru、volatile-lfu 四種策略是針對已經設定了過期時間的鍵值對。到鍵值對的到期時間到了或Redis記憶體使用量達到了maxmemory閾值,Redis會根據這些策略對鍵值對進行淘汰;

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

所有資料範圍內的淘汰策略

allkeys-lru、allkeys-random、allkeys-lfu 這三種策略淘汰的資料範圍擴大到所有的鍵值對,無論這些鍵值對是否設定了過期時間,篩選資料進行淘汰的規則是:

  • allkeys-random 策略,從所有鍵值對中隨機選擇並刪除資料;

  • allkeys-lru 策略,使用LRU 演算法在所有資料中進行篩選。

  • allkeys-lfu 策略,使用 LFU 演算法在所有資料中進行篩選。

關於LRU演算法

LRU演算法即是最近最常使用演算法,由於LRU會使用一個鍊錶去維護使用的資料列表,當使用的資料越多,其移動元素時就會越耗時,這不可避免地會影響Redis主執行緒。為此Redis對lru演算法做了一些簡化。

LRU 策略的核心思想:如果一個數據剛剛被訪問,那麼這個數據肯定是熱數據,還會再次訪問。

依照這個核心思想,Redis 中的 LRU 策略,會在每個資料對應的 RedisObject 結構體中設定一個 lru 字段,用來記錄資料的存取時間戳記。在進行資料淘汰時,LRU 策略會在候選資料集中淘汰掉 lru 欄位值最小的資料(也就是存取時間最長的資料)。

所以,在資料被頻繁存取的業務場景中,LRU 策略的確能有效留存存取時間最近的資料。而且,因為留存的這些資料還會再次被訪問,所以又可以提升業務應用程式的存取速度。

具體做法是,在存取鍵值對時,redis會記錄最近一次造訪的時間戳記。當redis決定淘汰數據時,會隨機挑選N個數據,把它們當作一個候選集合,把最小的時間戳給篩選出去。當下次要淘汰資料時,會挑選比第一次挑選的候選集合時間戳值要小的資料進入新的候選集合。當資料達到maxmemory-samples 時,將最小的值給淘汰掉。

透過此指令可以設定挑選的候選集合數CONFIG SET maxmemory-samples N

使用建議

依據策略的特性,可以針對不同場景選擇不同的策略來淘汰資料。

  • 當快取資料沒有明顯的冷熱之分,即資料的存取頻率差距不大,建議使用allkeys-random 隨機策略淘汰資料;
  • 當數據有明顯的冷熱之分,建議使用allkeys-lruvolatile-lru 演算法,將最近最常存取的資料留在快取資料中;
  • 當業務中存在置頂需求,即不會過期的數據,這類一般不會設定過期時間,可以採用volatile-lru策略。這樣這類數據就不會被淘汰,而其它數據可以根據lru規則進行淘汰。

更多程式相關知識,請造訪:程式設計入門! !

以上是淺析Redis快取中的8種淘汰策略的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

redis數據怎麼清空 redis數據怎麼清空 Apr 10, 2025 pm 10:06 PM

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

centos redis如何配置Lua腳本執行時間 centos redis如何配置Lua腳本執行時間 Apr 14, 2025 pm 02:12 PM

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

redis命令行怎麼用 redis命令行怎麼用 Apr 10, 2025 pm 10:18 PM

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

redis過期策略怎麼設置 redis過期策略怎麼設置 Apr 10, 2025 pm 10:03 PM

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。

如何優化debian readdir的性能 如何優化debian readdir的性能 Apr 13, 2025 am 08:48 AM

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信

redis計數器怎麼實現 redis計數器怎麼實現 Apr 10, 2025 pm 10:21 PM

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

See all articles