Redis內存淘汰策略和過期鍵刪除策略有哪些?

Redis 提供 8 種內存淘汰策略,以下是詳細解析及場景建議:

一、核心策略解析

  1. noeviction (默認策略)

    • 機制:內存滿時拒絕新寫入操作,返回錯誤
    • 優勢:絕對數據安全
    • 場景:金融交易系統、醫療數據存儲
  2. allkeys-lru (推薦通用策略)

    • 機制:全局淘汰最久未使用的鍵
    • 優勢:自動識別冷熱數據
    • 場景:電商商品緩存、新聞資訊系統
  3. volatile-lru

    • 機制:僅淘汰帶過期時間的LRU鍵
    • 優勢:保護持久化數據
    • 場景:會話緩存 + 持久化數據混合存儲
  4. allkeys-random

    • 機制:隨機淘汰任意鍵
    • 優勢:簡單高效
    • 場景:臨時數據緩存、壓力測試環境
  5. volatile-random

    • 機制:隨機淘汰帶過期時間的鍵
    • 優勢:有限范圍內的隨機淘汰
    • 場景:定時刷新緩存池

二、特殊場景策略

  1. volatile-ttl

    • 機制:優先淘汰最快過期的鍵
    • 優勢:精確控制數據生命周期
    • 場景:限時搶購庫存緩存、驗證碼存儲
  2. allkeys-lfu (4.0+)

    • 機制:淘汰使用頻率最低的鍵
    • 優勢:長期保留高頻數據
    • 場景:用戶畫像數據、熱門推薦數據
  3. volatile-lfu (4.0+)

    • 機制:淘汰帶過期時間的低頻鍵
    • 優勢:兼顧頻率和有效期
    • 場景:周期性熱點數據緩存

三、配置示例

# 設置最大內存為4GB
maxmemory 4gb
# 使用LFU策略(生產推薦)
maxmemory-policy allkeys-lfu

四、決策樹參考

內存敏感型系統 → 選擇LFU策略
時間敏感型數據 → 選擇TTL策略
數據重要性分層 → 使用volatile系列
突發流量防護 → 使用allkeys-random

注:LFU策略需Redis 4.0+版本支持,建議生產環境優先使用LFU系列策略,可通過OBJECT FREQ命令實時監控鍵訪問頻率。

過期鍵刪除策略

Redis 的過期鍵刪除策略主要有兩種,配合內存淘汰機制共同管理鍵生命周期:

1. 惰性刪除(被動刪除)

實現原理
當客戶端訪問某個鍵時,Redis 會先檢查該鍵是否已過期。如果過期則立即刪除,否則返回數據。

優勢

  • 節省 CPU 資源(只在訪問時檢查)
  • 對正常讀寫無性能影響

適用場景

  • 過期鍵被頻繁訪問的場景
  • 對內存占用不敏感的長期運行系統

2. 定期刪除(主動刪除)

實現原理
Redis 以固定頻率(默認每秒 10 次)隨機掃描設置了過期時間的鍵:

  1. 從過期字典中隨機抽取 20 個鍵
  2. 刪除其中已過期的鍵
  3. 如果過期的鍵比例超過 25%,重復步驟 1

優勢

  • 主動釋放內存空間
  • 減少內存泄漏風險

適用場景

  • 存在大量長期不訪問的過期鍵
  • 對內存敏感需要主動清理的場景

3. 內存淘汰機制(補充策略)

當內存達到 maxmemory 限制時,Redis 會根據配置執行淘汰策略,常用策略包括:

  • volatile-lru:淘汰最近最少使用的過期鍵
  • volatile-ttl:淘汰剩余存活時間最短的鍵
  • allkeys-lru:淘汰整個數據集中的最近最少使用鍵

策略組合
Redis 默認采用 惰性刪除 + 定期刪除 組合策略,配合內存淘汰機制形成三級防御:

  1. 定期刪除主動清理大部分過期鍵
  2. 惰性刪除處理漏網之魚
  3. 內存淘汰機制兜底防止內存溢出

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

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

相關文章

【C/C++】自定義類型:結構體

文章目錄 前言自定義類型:結構體1.結構體類型的聲明1.1 結構體回顧1.1.1 結構的聲明 1.1.2 結構體變量的創建和初始化1.2 結構的特殊聲明1.3 結構的自引用 2.結構體內存對齊2.1 對?規則2.2 為什么存在內存對齊?2.3 修改默認對?數 3. 結構體傳參4.結構體…

PPO算法:一種先進的強化學習策略

什么是PPO算法? PPO(Proximal Policy Optimization)是一種增強學習算法,主要應用于解決連續控制任務。PPO算法在2017年由OpenAI提出,旨在解決傳統策略梯度方法在連續控制任務中面臨的挑戰。PPO算法通過引入一個近似目…

OpenCV實現數字水印的相關函數和示例代碼

OpenCV計算機視覺開發實踐:基于Qt C - 商品搜索 - 京東 實現數字水印的相關函數 用OpenCV來實現數字水印功能,需要使用一些位操作函數,我們需要先了解一下這些函數。 1. bitwise_and函數 bitwise_and函數是OpenCV中的位運算函數之一&…

基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲

標題:基于Python的計算機科學研究話題管理系統的設計與實現 - 爬蟲 內容:1.摘要 本文聚焦于基于Python的計算機科學研究話題管理系統的爬蟲部分。背景是隨著計算機科學研究的快速發展,相關話題數據海量且分散,人工管理效率低。目的是設計并實現一個能高…

告別手動解析!借助 CodeBuddy 快速開發網頁源碼提取工具

作為一名長期從事 Web 開發的程序員,我們在日常工作中,時不時會需要查看網頁的源代碼。這么做的目的通常是為了排查前端渲染的問題、分析接口返回的數據結構,或者就是單純地想快速提取頁面中的某些信息,比如文章鏈接、圖片地址&am…

為什么要在 input() 后加 .strip()?

strip() 是 Python 字符串的一個方法,用于去除字符串開頭和結尾的空白字符(包括空格、制表符 \t、換行符 \n 等)。 為什么要在 input() 后加 .strip()? 用戶在輸入時,可能會不小心在開頭或結尾輸入空格,例…

【日擼 Java 300行】Day 14(棧)

目錄 Day 14:棧 一、棧的基本知識 二、棧的方法 1. 順序表實現棧 2. 入棧 3. 出棧 三、代碼及測試 拓展: 小結 Day 14:棧 Task: push 和 pop 均只能在棧頂操作.沒有循環, 時間復雜度為 O(1). 一、棧的基本知識 詳細的介…

dotnet core c#調用Linux c++導出函數

1.聲明C++導出函數 platform_export.h // // Created by dev on 5/6/25. //#ifndef PLATFORM_EXPORT_H #define PLATFORM_EXPORT_H #if defined(_WIN32)#ifdef LIB_EXPORTS#define LIB_API __declspec(dllimport)#else#define LIB_API __declspec(dllimport)#endif #else#ifde…

SparkSQL操作Mysql

前面的課程我們學習了如何從csv文件中讀入數據,這相當于是對csv這種類型的數據的操作。那么接下來,我們一起看看,如何寫Spark程序來操作mysql數據庫。先來給大家介紹一下我們這節課的主要學習內容: (1)安裝…

語言學中的對象語言與元語言 | 概念 / 區別 / 實例分析

注:英文引文,機翻未校。 語言學中的“對象語言”和“元語言” 劉福長 現代外語 1989年第3期(總第45期) 在閱讀語言學著作時,我們有時會遇到這樣兩個術語:對象語言(object language&#xff0…

livenessProbe 和 readinessProbe 最佳實踐

在 Kubernetes 中,livenessProbe 和 readinessProbe 是確保應用高可用性的關鍵機制,但配置不當可能導致應用頻繁重啟或流量中斷。以下是配置這兩個探針的最佳實踐: 1. 核心區別與作用 探針類型目的失敗后果livenessProbe檢測應用是否 存活&…

集成管理工具Gitlab

GitLab 是一個功能強大的開源代碼托管和協作平臺,集成 GitLab 可以顯著提升團隊的開發效率。下面我將為你介紹如何集成 GitLab,包括安裝配置和基本使用流程。 一、GitLab 安裝與配置 GitLab 有多種安裝方式,推薦使用官方 Omnibus 包安裝&am…

Electron-Vue3、Electron-React、Electron-Angular打造輿情監控系統項目

Electron是一個跨平臺的桌面應用開發框架,可以讓我們用html css js的技術開發跨平臺桌面上可以安裝的軟件。視頻詳解: Electron教程 ElectronVue跨平臺桌面軟件開發教程-2024年更新(大地老師) 從Electron環境搭建開始到手把手教你調試、Elect…

08.webgl_buffergeometry_attributes_none ,three官方示例+編輯器+AI快速學習

本實例主要講解內容 這個Three.js示例展示了無屬性幾何體渲染技術,通過WebGL 2的gl_VertexID特性和偽隨機數生成算法,在著色器中動態計算頂點位置和顏色,而不需要在CPU端預先定義幾何體數據。 核心技術包括: WebGL 2的頂點ID特…

Ubuntu 22.04搭建OpenStreeMap地址解析服務(保姆級教程)

1.數據準備 1.1.全球數據 下載地址:https://planet.openstreetmap.org/ 1.2.特定區域的數據 下載地址:Geofabrik Download Server 2.安裝必要的軟件包 2.1.更新系統軟件包 sudo apt updatesudo apt upgrade 2.2.安裝所需要的軟件包 執行下面的命…

Ubuntu 22.04.5 LTS上部署Docker及相關優化

以下是在Ubuntu 22.04.5 LTS上部署Docker及相關優化的步驟: 安裝Docker 更新系統:在安裝Docker之前,先確保系統是最新的,執行以下命令:sudo apt update sudo apt upgrade -y安裝依賴包:安裝一些必要的依賴…

React -> AI組件 -> 調用Ollama模型, qwen3:1.7B非常聰明

使用 React 搭建一個現代化的聊天界面&#xff0c;支持與 Ollama 本地部署的大語言模型進行多輪對話。界面清爽、功能完整&#xff0c;支持 Markdown 渲染、代碼高亮、<think> 隱藏思考標簽、流式漸進反饋、暗黑模式適配等特性。 &#x1f9e9; 核心功能亮點 ? 模型選擇…

vue2/3 中使用 @vue-office/docx 在網頁中預覽(docx、excel、pdf)文件

1. 安裝依賴&#xff1a; #docx文檔預覽組件npm install vue-office/docx vue-demi0.14.6#excel文檔預覽組件npm install vue-office/excel vue-demi0.14.6#pdf文檔預覽組件npm install vue-office/pdf vue-demi0.14.6 vue2.6版本或以下還需要額外安裝 vue/composition-api …

【應用密碼學】實驗五 公鑰密碼2——ECC

一、實驗要求與目的 1.復習CCC基本概念&#xff0c;并根據實驗平臺提供的資料完成驗證性實驗。 2.編程練習&#xff1a;以書上例題小模數p為例編程實現ECC的基本運算規則。 二、實驗內容與步驟記錄&#xff08;只記錄關鍵步驟與結果&#xff0c;可截圖&#xff0c;但注意排版…

rust-candle學習筆記9-使用tokenizers加載qwen3分詞,使用分詞器處理文本

參考&#xff1a;about-pytorch&#xff0c; about-tokenizers 在魔搭社區鏈接下載qwen3的tokenizer.json文件 添加依賴庫&#xff1a; cargo add tokenizers tokenizers庫初體驗&#xff1a; use tokenizers::tokenizer::{self, Result, Tokenizer};fn main() -> Resu…