Redis--基礎知識點--26--過期刪除策略 與 淘汰策略

Redis 的過期策略和淘汰策略是內存管理的核心機制,分別用于處理鍵的自動失效和內存不足時的數據清理。以下是詳細說明:


1 、過期刪除策略(Expiration Policy)

處理已設置過期時間(EXPIRE)的鍵,確保它們在過期后被刪除。

1.1 被動刪除(惰性刪除)

  • 默認行為:始終啟用,無需配置。
  • 觸發時機:當客戶端嘗試訪問某個鍵時,Redis 會檢查其是否過期。
  • 行為:若鍵已過期,則直接刪除并返回空結果,不返回數據。
  • 優點:僅在訪問時檢查,節省 CPU 資源。
  • 缺點:長期未被訪問的過期鍵可能殘留內存(需配合定期刪除)。

1.2 定期刪除(主動掃描)

  • 默認行為:始終啟用,無需配置。
  • 觸發時機:Redis 默認每秒 10 次隨機抽查部分鍵。
  • 行為
    • 隨機抽取 20 個設置了過期時間的鍵。
    • 刪除其中已過期的鍵。
    • 若本輪刪除的鍵超過 25%,重復流程(避免阻塞)。
  • 配置參數
    • hz 10:控制定期刪除的頻率(默認每秒 10 次)。
    • active-expire-effort:調整掃描強度(1-10,值越大越嚴格)。
  • 優點:平衡內存和性能,避免內存泄漏。
  • 缺點:無法保證及時刪除所有過期鍵。

1.3. 過期鍵的存儲

  • Redis 使用獨立的字典(expires)記錄鍵的過期時間,與主鍵字典分離。
  • 刪除過期鍵時,會同時從主字典和 expires 字典中移除。

2 淘汰刪除策略(Eviction Policy)

當內存達到 maxmemory 限制時,根據策略主動刪除鍵以釋放空間。

2.1 不淘汰(noeviction)

  • 行為:內存不足時,拒絕寫入操作(返回錯誤),但允許讀取和刪除。
  • 適用場景:數據重要性高,不允許丟失(如分布式鎖)。

2.2 LRU 策略(Least Recently Used)

  • allkeys-lru:從所有鍵中淘汰最久未使用的鍵。
  • volatile-lru:僅從設置了過期時間的鍵中淘汰最久未使用的鍵。
  • 實現:Redis 使用近似 LRU 算法,維護一個隨機采樣的候選池(默認 5 個樣本,可通過 maxmemory-samples 調整)。

2.3 LFU 策略(Least Frequently Used,Redis 4.0+)

  • allkeys-lfu:從所有鍵中淘汰訪問頻率最低的鍵。
  • volatile-lfu:僅從設置了過期時間的鍵中淘汰訪問頻率最低的鍵。
  • 實現:記錄鍵的訪問次數和衰減因子,優先淘汰冷數據。

2.4 隨機策略

  • allkeys-random:從所有鍵中隨機淘汰。
  • volatile-random:僅從設置了過期時間的鍵中隨機淘汰。
  • 適用場景:數據無明顯訪問模式,需快速釋放內存。

2.5 TTL 策略

  • volatile-ttl:僅淘汰設置了過期時間的鍵中,剩余生存時間(TTL)最短的鍵。
  • 適用場景:希望優先保留長期有效的數據。

2.6 策略對比與選擇建議

策略適用場景特點
noeviction禁止數據丟失(如緩存+數據庫模式)內存不足時阻塞寫入
allkeys-lru緩存場景,數據訪問模式符合局部性高效利用內存,推薦默認策略
volatile-lru需結合過期時間使用僅淘汰帶過期時間的鍵
allkeys-lfu訪問頻率差異大的數據適合熱點數據頻繁訪問的場景
volatile-ttl希望短期數據優先淘汰簡單直接,但可能誤刪熱點數據

2.7 最佳實踐

  1. 緩存場景
    • 優先使用 allkeys-lruallkeys-lfu,結合 maxmemory-policy 配置。
    • 設置合理的 maxmemory(如系統內存的 60%-80%)。
  2. 持久化數據
    • 使用 noeviction,配合數據庫做主從備份。
  3. 混合場景
    • 結合 volatile-ttlvolatile-lru,為部分鍵設置過期時間。

2.8 淘汰策略的其它問題

2.8.1 數據庫有1000萬數據,Redis只能緩存20w數據,如何保證Redis中的數據都是熱點數據 ?

使用allkeys-lru(挑選最近最少使用的數據淘汰)淘汰策略,留下來的都是經常訪問的熱點數據

2.8.2 Redis的內存用完了會發生什么?

主要看數據淘汰策略是什么?如果是默認的配置( noeviction ),會直接報錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81150.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81150.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第六天——貪心算法——字符串分隔

1. 題目 給定一個字符串 s,我們需要將其劃分為盡可能多的部分,使得同一字母最多出現在一個部分中。 例如:字符串 "ababcc" 可以劃分為 ["abab", "cc"],但要避免 ["aba", "bcc&quo…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: 注意“回車換行“的跨平臺使用.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

Maven 插件參數注入與Mojo開發詳解

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

擴增子分析|R分析之微生物生態網絡穩定性評估之節點和連接的恒常性、節點持久性以及組成穩定性指數計算

一、引言 周集中老師團隊于2021年在Nature climate change發表的文章,闡述了網絡穩定性評估的原理算法,并提供了完整的代碼。自此對微生物生態網絡的評估具有更全面的指標,自此網絡穩定性的評估廣受大家歡迎。本文將介紹網絡穩定性之節點和連…

人體肢體渲染-一步幾個腳印從頭設計數字生命——仙盟創夢IDE

人體肢體動作數據集-太極拳 渲染代碼 # 初始化Pygame pygame.init()# 設置窗口尺寸 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 window pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("動作回放")# 設置幀率 FPS 30 clock pyg…

強化學習入門:馬爾科夫獎勵過程

文章目錄 前言1、組成部分2、應用例子3、馬爾科夫獎勵過程總結 前言 最近想開一個關于強化學習專欄,因為DeepSeek-R1很火,但本人對于LLM連門都沒入。因此,只是記錄一些類似的讀書筆記,內容不深,大多數只是一些概念的東…

騰訊開源實時語音大模型VITA-audio,92mstoken極速響應,支持多語言~

簡介 VITA-Audio 是一個由騰訊優圖實驗室(Tencent Youtu Lab)、南京大學和廈門大學的研究人員共同開發的項目,旨在解決現有語音模型在流式生成(streaming)場景下生成第一個音頻令牌(token)時的高…

測序的原理

Sanger 測序原理 https://v.qq.com/x/page/d0124c0k44t.html illumina 測序原理: https://v.qq.com/x/page/i0770fd7r9i.html PacBio 第三代 SMRT 單分子測序 https://v.qq.com/x/page/r03534cry7u.html Ion torrent 測序原理 https://v.qq.com/x/page/v01754s6r82.…

高項-邏輯數據模型

邏輯數據模型的核心理解 1. 定義與特點 邏輯數據模型(Logical Data Model, LDM): 是一種抽象的數據結構設計,用于描述業務實體(如客戶、訂單)及其關系(如“客戶下單”)&#xff0c…

《數字分身進化論:React Native與Flutter如何打造沉浸式虛擬形象編輯》

React Native,依托JavaScript語言,借助其成熟的React生態系統,開發者能夠快速上手,將前端開發的經驗巧妙運用到移動應用開發中。它通過JavaScript橋接機制調用原生組件,實現與iOS和Android系統的深度交互,這…

提高繩牽引并聯連續體機器人運動學建模精度的基于Transformer的分段學習方法

合肥工業大學王正雨老師團隊針對繩牽引并聯連續體機器人的運動學建模提出一種基于Transformer網絡的分段學習方法,該方法較傳統建模性能卓越、精度更高。相關研究論文“Transformer-based segmented learning for kinematics modelling of a cable-driven parallel …

【PX4飛控】在 Matlab Simulink 中使用 Mavlink 協議與 PX4 飛行器進行交互

這里列舉一些從官網收集的比較有趣或者實用的功能。 編寫 m 腳本與飛行器建立 UDP 連接,并實時可視化 Mavlink 消息內容,或者讀取腳本離線分析數據。不光能顯示 GPS 位置或者姿態等信息的時間曲線,可以利用 Matlab Plot 功能快速定制化顯示一…

Oracle中的select1條、幾條、指定范圍的語句

在Oracle中,可以使用不同的方法來選擇一條記錄、多條記錄或指定范圍內的記錄。以下是具體的實現方式: 1. 查詢單條記錄 使用ROWNUM偽列限制結果為1條: SELECT * FROM your_table WHERE ROWNUM 1;特點:Oracle會在結果集生成時分…

自營交易考試為何出圈?一場模擬交易背后的真實競爭

在交易圈里,有個現象正在悄悄發生:越來越多交易員開始主動報名參與一類“非實盤”的考試,原因卻并不復雜。不是為了資格證書,也不是為了炫技,而是為了一個更實在的東西——穩定、透明的利潤分成,以及一次向…

一鍵生成達夢、Oracle、MySQL 數據庫 ER 圖!解鎖高效數據庫設計!

從事企業軟件項目開發的同學們一定對 ER 圖很熟悉,可以幫助用戶快速厘清數據庫結構,方便后續維護和優化。但是在日常工作中,面對復雜的數據結構,整理表設計文檔對于每一位DBA來說都很頭大,需要將設計細節轉化為條理清晰…

游戲行業DDoS攻擊類型及防御分析

游戲行業作為DDoS攻擊的高發領域,攻擊類型復雜多樣,結合多個來源的信息,以下是其主要攻擊類型及特征分析: 1. 傳統流量型DDoS攻擊 UDP洪水攻擊:通過大量UDP報文淹沒服務器端口,消耗帶寬資源,導…

Web 架構之狀態碼全解

文章目錄 一、引言二、狀態碼分類2.1 1xx 信息性狀態碼2.2 2xx 成功狀態碼200 OK201 Created204 No Content 2.3 3xx 重定向狀態碼301 Moved Permanently302 Found304 Not Modified 2.4 4xx 客戶端錯誤狀態碼400 Bad Request401 Unauthorized403 Forbidden404 Not Found 2.5 5x…

jedis+redis pipeline詭異的鏈接損壞、數據讀取異常問題解決

文章目錄 問題現象棧溢出(不斷的重連)讀取超時未知響應嘗試讀取損壞的鏈接讀取到的數據和自己要讀的無關,導致空指針、類型轉換錯誤,數據讀取錯亂 問題寫法問題分析修復注意點 問題現象 棧溢出(不斷的重連&#xff09…

c++STL-list的模擬實現

cSTL-list的模擬實現 list源碼剖析list模擬實現list構造函數拷貝構造函數賦值重載迭代器 iterator訪問結點數size和判空尾插 push_back頭插 push_front尾刪pop_back頭刪pop_front插入 insert刪除 erase清空clear和析構函數訪問結點 參考程序 list源碼剖析 建議先看cSTL-list的…

WeakAuras Lua Script ICC (BarneyICC)

WeakAuras Lua Script ICC (BarneyICC) https://wago.io/BarneyICC/69 全量英文字符串: !WA:2!S33c4TXX5bQv0kobjnnMowYw2YAnDKmPnjnb4ljzl7sqcscl(YaG6HvCbxaSG7AcU76Dxis6uLlHNBIAtBtRCVM00Rnj8Y1M426ZH9XDxstsRDR)UMVCTt0DTzVhTjNASIDAU…