【redis】redis內存管理,過期策略與淘汰策略

一:Redis 的過期刪除策略及處理流程如下:

1. 過期刪除策略

Redis 通過以下兩種策略刪除過期鍵:

1.1 惰性刪除
  • 觸發時機:當客戶端訪問某個鍵時,Redis 會檢查該鍵是否過期。
  • 執行流程
    1. 客戶端請求訪問鍵。
    2. Redis 檢查鍵的過期時間。
    3. 如果鍵已過期,Redis 刪除該鍵并返回空;如果未過期,返回鍵值。
1.2 定期刪除
  • 觸發時機:Redis 定期隨機抽取部分鍵檢查是否過期。
  • 執行流程
    1. Redis 從設置了過期時間的鍵中隨機抽取一部分。
    2. 檢查這些鍵是否過期。
    3. 刪除已過期的鍵。
    4. 如果過期鍵比例超過一定閾值,重復該過程。

2. 處理流程

Redis 處理過期鍵的流程結合了惰性刪除和定期刪除:

  1. 客戶端訪問

    • 客戶端請求訪問鍵時,Redis 先檢查鍵是否過期,若過期則刪除并返回空。
  2. 定期檢查

    • Redis 定期隨機抽取部分鍵檢查過期情況,刪除已過期的鍵。
    • 如果過期鍵比例較高,繼續檢查更多鍵。
  3. 內存回收

    • 通過惰性刪除和定期刪除,Redis 逐步回收過期鍵占用的內存。

3. 配置參數

  • hz:控制定期刪除的頻率,默認 10,表示每秒執行 10 次檢查。
  • maxmemory-samples:設置每次檢查時隨機抽取的鍵數量,默認 5。

4. 總結

  • 惰性刪除:在訪問時檢查并刪除過期鍵。
  • 定期刪除:定期隨機檢查并刪除過期鍵。

這兩種策略共同確保 Redis 高效管理內存,避免過期鍵占用過多資源。
在 Redis 中,緩存淘汰策略過期策略 是兩種不同的機制,但它們共同作用于緩存數據的管理。以下是對 LRULFU 緩存淘汰策略的區別,以及它們與過期策略的應用場景的詳細解讀。


二、緩存淘汰策略:LRU 和 LFU 的區別

1. LRU(Least Recently Used,最近最少使用)

  • 原理:優先淘汰最近最少被訪問的數據。
  • 實現方式:Redis 使用近似 LRU 算法,通過隨機采樣一部分鍵,從中淘汰最近最少使用的鍵。
  • 特點
    • 關注數據的訪問時間。
    • 適合訪問模式有明顯熱點數據的場景。
  • 適用場景
    • 熱點數據緩存(如新聞、社交媒體熱門內容)。
    • 需要保留最近訪問數據的場景。

2. LFU(Least Frequently Used,最不常用)

  • 原理:優先淘汰訪問頻率最低的數據。
  • 實現方式:Redis 記錄每個鍵的訪問頻率,淘汰訪問次數最少的鍵。
  • 特點
    • 關注數據的訪問頻率。
    • 適合訪問模式較為均勻的場景。
  • 適用場景
    • 訪問頻率差異較大的場景(如推薦系統、廣告系統)。
    • 需要保留高頻訪問數據的場景。

3. LRU 和 LFU 的區別

特性LRULFU
關注點數據的訪問時間數據的訪問頻率
適用場景有明顯熱點數據的場景訪問頻率差異較大的場景
優點簡單高效,適合短期熱點數據更精準,適合長期高頻數據
缺點可能誤刪高頻但近期未訪問的數據需要額外記錄訪問頻率,開銷較大

三、緩存淘汰策略與過期策略的結合應用

在實際應用中,緩存淘汰策略和過期策略通常需要結合使用,以滿足不同的業務需求。

1. 熱點數據緩存

  • 過期策略:為熱點數據設置較長的過期時間。
  • 淘汰策略:使用 allkeys-lru,優先保留最近訪問的熱點數據。
  • 場景:新聞、社交媒體熱門內容。

2. 臨時數據緩存

  • 過期策略:為臨時數據(如驗證碼、會話)設置較短的過期時間。
  • 淘汰策略:使用 volatile-ttl,優先淘汰即將過期的數據。
  • 場景:驗證碼、會話緩存。

3. 冷數據清理

  • 過期策略:為冷數據設置過期時間。
  • 淘汰策略:使用 volatile-lfu,優先淘汰訪問頻率低的冷數據。
  • 場景:歷史數據、低頻訪問數據。

4. 不允許數據丟失的場景

  • 過期策略:不設置過期時間,或設置較長的過期時間。
  • 淘汰策略:使用 noeviction,確保數據不被淘汰。
  • 場景:金融、交易系統。

四、總結

1. LRU 和 LFU 的選擇

  • 如果業務有明顯的熱點數據,選擇 LRU
  • 如果業務需要關注數據的訪問頻率,選擇 LFU

2. 過期策略的選擇

  • 如果數據有明確的生命周期,設置 過期時間
  • 如果需要及時清理過期鍵,啟用 定期刪除

3. 結合使用

  • 根據業務特點,合理配置 緩存淘汰策略過期策略,以優化 Redis 的性能和資源利用率。

通過合理選擇策略,可以有效提升 Redis 的緩存命中率和系統性能。

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

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

相關文章

tp6上傳文件大小超過了最大值+驗證文件上傳大小和格式函數

問題: 最近用tp6的文件上傳方法上傳文件時報文件過大錯誤。如下所示: $file $this->request->file(file);{"code": 1,"msg": "上傳文件大小超過了最大值!","data": {"code": 1,&q…

Kreuzberg:本地OCR+多格式解析!Kreuzberg如何用Python暴力提取30+文檔格式?程序員看完直呼內行!

嗨,大家好,我是小華同學,關注我們獲得“最新、最全、最優質”開源項目和高效工作學習方法 我們經常需要從各種不同類型的文檔中提取文本內容,無論是辦公文檔、圖像還是PDF文件。而Kreuzberg這個Python庫的出現,為我們提…

Windows程序設計29:對話框之間的數據傳遞

文章目錄 前言一、父子對話框之間的數據傳遞1.父窗口獲取子窗口數據2.子窗口獲取父窗口數據 二、類外函數調用窗口的操作1.全局變量方式2.參數傳遞方式 總結 前言 Windows程序設計29:對話框之間的數據傳遞。 在Windows程序設計28:MFC模態與非模態對話框…

【C語言】第八期——指針

目錄 1 初始指針 2 獲取變量的地址 3 定義指針變量、取地址、取值 3.1 定義指針變量 3.2 取地址、取值 4 對指針變量進行讀寫操作 5 指針變量作為函數參數 6 數組與指針 6.1 指針元素指向數組 6.2 指針加減運算(了解) 6.2.1 指針加減具體數字…

為 Power Automate 注冊 Adobe PDF Services

前言 最近,再測試如何將HTML轉換成PDF,然后發現Adobe有一個免費的操作可以用,好開心,趕緊注冊一下。 正文 1.先注冊一個賬號,然后登錄到Adobe Developer 注冊鏈接:https://www.adobe.com/go/getstarted_pow…

BY組態:工業自動化的未來,觸手可及

1. BY組態軟件的核心優勢 簡單易用:圖形化界面,降低學習成本,快速上手。 高效靈活:支持多種設備協議,兼容性強,適用于多種行業。 實時監控:提供實時數據采集與可視化,助力高效決策…

有哪些開源大數據處理項目使用了大模型

以下是一些使用了大模型的開源大數據處理項目: 1. **RedPajama**:這是一個開源項目,使用了LLM大語言模型數據處理組件,對GitHub代碼數據進行清洗和處理。具體流程包括數據清洗、過濾低質量樣本、識別和刪除重復樣本等步驟。 2. …

網絡安全之攻防筆記--通用安全漏洞SQL注入sqlmapOraclemongodbDB2

通用安全漏洞SQL注入&sqlmap&Oracle&mongodb&DB2 數據庫類型 ACCESS 特性 沒數據庫用戶 沒數據庫權限 沒數據庫查詢參數 沒有高權限注入說法 暴力猜解,借助字典得到數據 注入方式 聯合注入 偏移注入 表名列名猜解不到 偏移注入 MySQL 低權限 常…

【信息系統項目管理師-案例真題】2022下半年案例分析答案和詳解

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 試題一(24分)【問題1】(6分)【問題2】(10分)【問題3】(8分)試題二(26分)【問題1】(8分)【問題2】(8分)【問題3】(4分)【問題4】(6分)試題三(25分)【問題1】(12分)【問題2】(7分)【問題…

正點原子[第三期]Arm(iMX6U)Linux系統移植和根文件系統構建-5.3 xxx_defconfig過程

前言: 本文是根據嗶哩嗶哩網站上“arm(iMX6U)Linux系統移植和根文件系統構鍵篇”視頻的學習筆記,在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內容。本文大量引用了正點原子教學視頻和鏈接中的內容。 引用: …

C++初階——簡單實現list

目錄 1、前言 2、List.h 3、Test.cpp 1、前言 1. 簡單實現std::list,重點:迭代器,模板類,運算符重載。 2. 并不是,所有的類,都需要深拷貝,像迭代器類模板,只是用別的類的資源&am…

conda環境中運行“python --version“所得的版本與環境中的python版本不一致----deepseek并非全能

conda環境中運行python —version所得python版本與conda環境中的python版本不一致------deepseek并非全能 問題 conda環境中運行python —version所得python版本與conda環境中的python版本不一致 我所做的探索 1 網頁搜索 2 求助于DeepSeek 可以用四個字來形容deepseek給出…

HarmonyOS學習第5天: Hello World的誕生之旅

鴻蒙初印象:開啟探索之門 在操作系統的廣袤天地中,HarmonyOS(鴻蒙系統)宛如一顆冉冉升起的新星,自誕生起便備受矚目。它由華為傾力打造,是一款基于微內核的全場景分布式操作系統,以其獨特的技術…

centos9安裝k8s集群

以下是基于CentOS Stream 9的Kubernetes 1.28.2完整安裝流程(containerd版): 一、系統初始化(所有節點執行) # 關閉防火墻 systemctl disable --now firewalld# 關閉SELinux sed -i "s/SELINUXenforcing/SELINU…

CIG容器重量級監控系統

1.介紹 CAdvisorinfluxDBGranfana docker 原生命令 監控docker容器狀態 docker stats 2.CAdvicsor 3.InfluxDB 4.Granafana 5.搭建 volumes:grafana_data: services:influxdb:image: tutum/influxdbrestart: alwaysenvironment:- PRE_CREATE_DBcadvisorports:- "8083…

REACT學習DAY02(恨連接不上服務器)

受控表單綁定 概念&#xff1a;使用React組件的狀態&#xff08;useState&#xff09;控制表單的狀態 1. 準備一個React狀態值 const [value,setValue] useState() 2. 通過value屬性綁定狀態&#xff0c;通過onChange屬性綁定狀態同步的函數 <input type"text&quo…

python——GUI圖形用戶界面編程

GUI簡介 我們前面實現的都是基于控制臺的程序&#xff0c;程序和用戶的交互通過控制臺來完成 本章&#xff0c;我們來學習GUI圖形用戶界面編程&#xff0c;我們可以通過python提供的豐富的組件&#xff0c;快速的視線使用圖形界面和用戶交互 GUI變成類似于“搭積木”&#x…

DeepSeek 助力 Vue 開發:打造絲滑的單選按鈕(Radio Button)

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

美顏相機1.0

項目開發步驟 1 界面開發 美顏相機界面構成&#xff1a; 標題 尺寸 關閉方式 位置 可視化 2 創建主函數調用界面方法 3 添加兩個面板 一個是按鈕面板一個是圖片面板 用JPanel 4 添加按鈕到按鈕面吧【注意&#xff1a;此時要用初始化按鈕面板的方法initBtnPanel 并且將按鈕添…

openharmony中hdf框架的驅動消息機制的實現原理

openharmony中hdf框架的驅動消息機制的實現原理 在分析hdf框架時發現繞來繞去的&#xff0c;整體梳理畫了一遍流程圖&#xff0c;發現還是有點模糊甚至不清楚如何使用的&#xff0c;詳細的每個點都去剖析細節又過于消耗時間&#xff0c;所以有時間便從功能應用的角度一塊塊的去…