【虹科乾貨】Redis 開發者需要了解的快取驅逐策略
在你 搭建並配置了一個Redis資料庫 之後 ,Redis成功地 提升了應用程式效能 。然而 這裡有一個潛在問題, 隨著快取資料的快速增加和記憶體佔用率的逐漸上升, 你 很快會發現Redis快取 容量即將達到硬體儲存容量上限 。或許 你曾 聽說 用 過快取驅逐 來解決這個問題 ,但 究竟是怎麼一回事呢?
無論 你 是在新興企業中擔任開發人員,還是在大型企業中擔任系統管理員,瞭解快取驅逐策略,並瞭解何時以及如何 使用 ,都至關重要。 在本文中 ,我們將深入探討這些細節,讓 你 對快取驅逐有更清晰的認識。
一、對 快取驅逐的理解
在Redis或任何依賴快取的系統 中, 快取驅逐策略都至關重要。它是解決快取空間大小和記憶體佔用問題的關鍵。當快取 資料 達到 硬體容量上限 時,快取系統必須做出決策:是拒絕接收新的資料,還是透過丟棄舊的資料為新資料騰出空間?
此時,快取驅逐就發揮作用了。 為了保持效能和資料一致性,在 快取達到上限 時,快取系統需要進行一系列判斷,以確定應該保留哪些快取 資料 ,或者需要丟棄哪些快取 資料 。
快取驅逐是指從快取中刪除特定資料的過程。 當快取達到 硬體 最大儲存容量時,必須刪除一些資料,為新資料騰出空間。
二、 快取驅逐策略
快取驅逐策略是 一種協議,它解決的問題是當 快取 達到上限 時,快取系統需要如何應對。不同的策略對應不同的程式 來 實現,用於確定應該驅逐(即刪除)哪些舊資料。以下是一些常見的策略。
· 最近最少使用(Least Recently Used , LRU) :想象一下,您正在整理衣櫃,您會優先扔掉哪些物品? 是學生時代遺留的格子襯衫,還是近期購入的一頂鴨舌帽? LRU快取驅逐策略會首先 刪除近期 被訪問 次數 最少的快取 資料 。其基本假設是不經常被訪問的 資料 在短期內不會再次被訪問。
· 最不頻繁使用(Least Frequently Used, LFU) :假設 你 是一名圖書管理員, 你 將如何選擇要從圖書館書架上移除的書籍?很可能是那些被借閱次數最少的書籍 , 這也是LFU快取驅逐策略的思想。 LFU策略會優先驅逐最不經常被訪問的快取 資料, 其基本假設是 近期不再需要這些 專案。
· Window TinyLFU(W-TinyLFU) :這個策略稍微複雜一些。想象一下, 你 是一名電臺DJ, 你 希望播放那些受歡迎且最近熱門的歌曲。 W-TinyLFU快取驅逐策略根據資料的新舊程度和訪問頻率 判斷資料的價值,從而將最有價值的資料 保留在快取中。W-TinyLFU在處理多變的訪問模式和分散式快取環境時尤為有效。
· 生存時間(Time to Live, TTL) :想象一下, 冰箱裡 有一盒新鮮的 聖女果 ,如果在冰箱裡放太久,就會開始變質。此時,不管 你 有多喜歡它們,都應該將它們扔掉。 TTL在快取中有類似的概念。每個快取 資料 都有一個特定的 “過期時間”。一旦達到該時間限制,無論訪問頻率或最近訪問次數如何, 資料 都會被驅逐。這種策略可以確保 過時的資料被及時清除 。它適用於需要定期更新資料,並確保快取不提供舊 資料 的情況。
策略的有效性取決於具體的使用情況,沒有一種策略適用於所有場景。在選擇和 使用 快取驅逐策略時,需要仔細考慮應用程式的特定需求和資料訪問模式。
三、採用預設設定的風險
在Redis中,預設的驅逐策略是易失性LRU(volatile-LRU)。但僅僅依賴預設策略而不瞭解其潛在影響 ,就 可能存在一定風險。應用程式服務於多樣化的使用者需求,資料模式和 資料 驅逐要求可能存在巨大差異。 透過正確設定驅逐策略可以預防潛在的問題。
1、第一道防線:監控
首先,我們需要監控快取效能以確認何時需要進行驅逐操作。我們透過監控工具達成這一目的。
在Redis中,可以透過 INFO命令 來監控快取效能, 也可以 使用 第三方監控工具 提供更詳細的效能分析。
最佳化快取效能涉及兩個方面,需要根據監控效能時所發現的資訊,對快取設定和快取驅逐策略進行調整。分散式快取場景中,監控與調優在確保跨多節點一致、快取 的 高效管理時尤為重要。
2、選擇合適的Redis驅逐策略
在Redis中,快取由maxmemory配置指令進行管理,該指令用於設定記憶體限制。而maxmemory-policy配置指令則根據所選擇的快取驅逐策略來指導Redis進行驅逐決策。這些配置項都儲存在redis.conf配置檔案中。
Redis提供了多種驅逐策略,但以下幾種可能是 你 最關心的策略。
(1) allkeys-lru
Redis的allkeys-lru策略用於刪除最近最少使用的快取 資料 ,且無論是否設定了過期時間。
· 這個策略中,Redis會額外記錄每個鍵的最後訪問時間。每次讀取或寫入鍵時,Redis會更新這個資訊。
· 當Redis達到記憶體限制並且需要驅逐 資料 時,它會尋找最長時間未被訪問的鍵,也就是"最近最少使用"的鍵。
· 接著,Redis會刪除這些鍵,為新的資料騰出可用的空間。
allkeys-lru策略適用於Redis資料庫中的所有鍵,無論是否設定了過期時間。與volatile-lru策略不同的是,後者僅適用於設定了過期時間的鍵。
(2) volatile-lru
volatile-lru策略用於刪除設定了過期時間的最近最少使用的快取 資料 。這個策略適用於那些需要定期重新整理資料的場景。
(3) allkeys-lfu
allkeys-lfu策略會刪除使用頻率最低的鍵。
· 在這個策略中,Redis會記錄每個鍵的訪問頻率。每次讀取或寫入鍵時,Redis會更新與鍵相關聯的計數器。
· 當Redis達到記憶體限制時,它會尋找具有最低 訪問頻率 的鍵 。
· 然後,Redis會刪除這些鍵,為新的資料騰出可用的空間。
(4) volatile-lfu
與allkeys-lfu類似,volatile-lfu策略僅適用於設定了過期時間的鍵。 且按訪問頻率評判鍵的價值,當快取達到上限時,刪除訪問頻率最低的鍵。
(5) volatile-ttl
volatile-ttl策略優先刪除具有最短TTL的鍵。
· 這個策略中,Redis會記錄每個鍵的TTL,即鍵的生存時間。TTL是一個持續時間,在到期之後,鍵將自動刪除。
· 當Redis達到記憶體限制時,它會尋找具有最短TTL的鍵,也就是即將過期的鍵。
· Redis會刪除這些鍵,為新的資料騰出可用的空間。
(6) noeviction
顧名思義, noeviction策略是當Redis達到記憶體限制並收到寫入命令時,不會驅逐任何鍵,而是返回錯誤。
· 當Redis達到記憶體限制並且收到寫入命令時,它會檢查驅逐策略。
· 如果策略設定為noeviction,則Redis不會驅逐任何鍵,而是向寫入命令返回錯誤。
· 在這種情況下,應用程式程式碼需要確定如何處理該錯誤條件。
事實上,以上 每種策略都 各 有其優缺點,最適合的策略 需要依 具體業務需求 而定 。
當處理大量資料時,使用良好結構的快取,並結合適當的快取驅逐策略,可以更好地 保持 快取的效能。Redis以其豐富的功能成為優秀的快取解決方案,併為處理大型資料集的應用程式提供了強大的支援。有效的快取管理不僅能透過快取命中加快資料檢索,還能減輕快取未命中的影響,使得Redis成為各種用例中可靠且高效的快取解決方案。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026953/viewspace-2988158/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【虹科乾貨】Redis Enterprise vs ElastiCache——如何選擇快取解決方案?RedisAST快取
- 虹科乾貨| 虹科Redis企業版資料庫:告別遊戲卡頓,讓快樂加速!Redis資料庫遊戲
- Redis快取刪除驅逐策略的工作方式 - codemancersRedis快取
- 【虹科乾貨】Oracle與Redis Enterprise協同,作為企業快取解決方案OracleRedis快取
- 虹科乾貨 | Redis企業版—比Redis開源更好用!Redis
- 虹科乾貨 | 一文詳解Redis企業版軟體!Redis
- 【虹科乾貨】關於JSON資料庫JSON資料庫
- 【虹科乾貨】無模式資料庫的利與弊模式資料庫
- 【虹科乾貨】5個關於微服務的誤解微服務
- 【虹科乾貨】設計微服務架構的原則微服務架構
- 虹科乾貨 | 資料庫的九大關鍵功能介紹資料庫
- 虹科乾貨 | 什麼是商業智慧 (BI) 儀表板?
- 【乾貨!!】三句話搞懂 Redis 快取穿透、擊穿、雪崩Redis快取穿透
- 虹科乾貨|Redis企業版資料庫為企業「資料安全」疊加最強Buff!Redis資料庫
- 虹科分享|被困雲端?虹科Redis企業版資料庫來解救!Redis資料庫
- Redis篇:持久化、淘汰策略,快取失效策略Redis持久化快取
- 開發者需要了解的WebKitWebKit
- Kubernetes Pod驅逐策略
- 天翼雲分散式快取服務(Redis)的應用場景(乾貨)分散式快取Redis
- 【虹科乾貨】觸發器和函式:讓程式碼更接近資料觸發器函式
- 阿里面試讓聊一聊Redis 的記憶體淘汰(驅逐)策略阿里面試Redis記憶體
- 虹科案例 | Redis企業雲如何透過快取輕鬆擴充套件到億級請求?Redis快取套件
- 虹科分享 | 虹科Redis企業版資料庫如何支援實時金融服務?Redis資料庫
- (五)Redis 快取異常、應對策略Redis快取
- 虹科分享 | 資料庫效能翻3倍:虹科Redis企業版的RoF是如何做到的?資料庫Redis
- 虹科分享|虹科Redis企業版資料庫帶你跑贏MySQL數字時代!Redis資料庫MySql
- 配置Redis作為快取(六種淘汰策略)Redis快取
- Redis-6-三種快取讀寫策略Redis快取
- 【虹科乾貨】零售商們正在尋找實時庫存解決方案
- 虹科乾貨 | 零售業數智升級不掉隊,get資料,get未來!
- 快取策略快取
- SDWebImage的快取策略Web快取
- Flutter 的快取策略Flutter快取
- 【虹科乾貨】使用記憶體資料庫解決三個資料庫效能問題記憶體資料庫
- HTTP - 快取策略HTTP快取
- Kubernetes-22:kubelet 驅逐策略詳解
- RN的快取策略探索快取
- Java Integer的快取策略Java快取