(Redis)內存淘汰策略

1. 為什么需要內存淘汰策略?

Redis 是一個基于內存的高性能數據庫,所有數據都存儲在內存中。

  • 優點:讀寫速度極快。

  • 缺點:內存有限,存滿之后如果繼續寫入,就必須有一套策略來決定“刪掉誰,留下誰”。

這就是 內存淘汰策略(Eviction Policy)
配置參數:

maxmemory <bytes>     # 限制 Redis 使用的最大內存
maxmemory-policy <policy>  # 設置淘汰策略

2. Redis 內存淘汰策略分類

Redis 提供了 8 種內存淘汰策略(6 個淘汰策略 + 2 個特殊模式)。

(1)不淘汰

  • noeviction(默認)

    • 當內存不足時,直接返回錯誤,不再接受寫入請求(讀請求正常)。

    • 適合當 Redis 作為緩存以外的使用場景,比如嚴格控制數據不丟失。


(2)針對設置了過期時間(TTL)的 key

  • volatile-lru:在設置了過期時間的 key 中,淘汰最近最少使用的 key。

  • volatile-lfu:在設置了過期時間的 key 中,淘汰使用頻率最低的 key。

  • volatile-ttl:在設置了過期時間的 key 中,優先淘汰 TTL(剩余生存時間)最短的 key。

  • volatile-random:在設置了過期時間的 key 中,隨機淘汰一個 key。


(3)針對所有 key

  • allkeys-lru:在所有 key 中,淘汰最近最少使用的 key(常見策略)。

  • allkeys-lfu:在所有 key 中,淘汰使用頻率最低的 key(更智能)。

  • allkeys-random:在所有 key 中,隨機淘汰一個 key。


3. 各策略優缺點

策略說明優點缺點應用場景
noeviction默認,不淘汰,寫操作報錯數據絕對安全無法繼續寫入嚴格控制數據不可丟失
volatile-lru在設置過期時間的 key 中淘汰最近最少使用常用緩存策略只作用于設置 TTL 的 key緩存系統,定期過期數據
allkeys-lru在所有 key 中淘汰最近最少使用最常用,命中率高可能誤刪重要數據通用緩存
volatile-lfu在設置過期時間的 key 中淘汰使用頻率最低更智能的緩存淘汰計算頻率有額外開銷熱點數據緩存
allkeys-lfu在所有 key 中淘汰使用頻率最低熱點數據保留更久實現復雜,性能略低高頻訪問的緩存系統
volatile-ttl在設置過期時間的 key 中,優先淘汰 TTL 最短的控制過期優先級使用場景少時間敏感型緩存
volatile-random在設置過期時間的 key 中隨機淘汰簡單命中率低特殊場景
allkeys-random在所有 key 中隨機淘汰簡單命中率低低優先級緩存

4. 實際推薦方案

  • allkeys-lru:最常用,適合做緩存,保證熱點數據盡量保留。

  • allkeys-lfu:Redis 4.0+ 引入,更智能,適合熱點數據集變化較快的場景。

  • volatile-ttl:適合有明顯過期優先級的業務,例如“臨期數據優先清理”。


5. 總結

  • Redis 內存滿時需要根據策略來淘汰數據。

  • LRU(Least Recently Used) → 淘汰最近最少用的數據。

  • LFU(Least Frequently Used) → 淘汰使用次數最少的數據。

  • TTL → 優先淘汰即將過期的數據。

  • 推薦 allkeys-lruallkeys-lfu,適合大多數緩存場景。

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

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

相關文章

Eclipse 里Mybatis的xml的頭部報錯

需要進行Eclipse 配置 MyBatis 的DTD文件Window -> Preference -> Maven -> 勾選 (download artifact javadoc).

SpringBoot Web快速入門_從零搭建你的第一個Web應用

在 Java 企業級開發領域&#xff0c;SpringBoot 以其 “約定優于配置” 的理念徹底革新了傳統 Spring 應用的開發模式。根據 2023 年 JetBrains 開發者調查報告&#xff0c;超 65% 的 Java 開發者將 SpringBoot 選為 Web 開發的首選框架。其優勢顯著&#xff1a;快速啟動&#…

手持 Mid360 + RealSense 相機 + Jetson Orin 一體平臺

這篇博客是我們開源的一個項目介紹&#xff0c;包括3D結構件 STP 文件與常見 SLAM 工程在 Arm 設備上編譯手冊等&#xff0c;將 Livox Mid360、Realsense 相機、Nvidia Jetson Orin、定制電池放在了一個手持設備上&#xff0c;同時這個手持設備預留了底部螺紋孔&#xff0c;當你…

H7-TOOL固件2.31發布,支持250M示波器,支持IAR下載算法加載運行,上位機支持UTF-8編碼,增加多款脫機燒錄芯片支持

【PC軟件】V2.3.1 1. 脫機燒錄功能更新: - 添加芯片: - 自動填充文件名、Flash地址、Flash大小、SRAM地址和SRAM大小 - FLM算法文件不支持自動填寫文件名&#xff0c;當生成文件后需要手動更新 - 廠商列表欄鼠標右鍵菜單可復制廠商名 - 修復添加芯片排列次序的問題…

自然語言處理——06 遷移學習(上)

1 fasttext工具介紹 1.1 介紹 fasttext 是 Facebook AI Research&#xff08;FAIR&#xff09;開發的開源 NLP 工具包&#xff0c;專門用來解決文本相關任務&#xff0c;比如情感分析、文本分類&#xff08;判斷新聞屬于體育/財經等&#xff09;、識別“人名/地名”這類實體&a…

數據庫MVCC是什么

問題數據庫MVCC是什么我的回答MVCC&#xff0c;全稱是"多版本并發控制"(Multi-Version Concurrency Control)&#xff0c;是數據庫管理系統中常用的一種并發控制技術。說白了&#xff0c;它就是通過維護數據的多個版本&#xff0c;讓讀操作不會被寫操作阻塞&#xff…

游戲廣告投放數據分析項目:拆解投放的“流量密碼”

用數據說話&#xff1a;1441條投放記錄拆解游戲廣告投放的“流量密碼”一、數據概況 & 處理思路 先放一張數據全家福&#xff0c;字段 13 個&#xff0c;樣本 1441 條&#xff0c;缺失值 0&#xff0c;只做了一件事&#xff1a;把“未知大小”“無”等臟數據清洗掉。 impor…

數據庫服務語句應用

文章目錄&#x1f31f;數據庫語句應用介紹&#x1f340;數據庫語句分類介紹DDL&#xff08;Data Definition Language&#xff09;數據定義語言DCL&#xff08;Data Control Language&#xff09;數據控制語言DML&#xff08;Data Manipulation Language&#xff09;數據操作語…

解釋器模式與布爾表達式的C++實現

詳細探討一下解釋器模式(Interpreter Pattern)以及如何使用它來實現一個簡單的布爾表達式求值器。 第一部分:解釋器模式詳解 1. 模式定義與意圖 解釋器模式是一種行為設計模式,它給定一個語言,定義其文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中…

ELK 重難點解析以及最佳實踐

ELK 重難點解析以及最佳實踐 目錄 ELK簡介核心組件詳解使用技巧重難點解析Spring Boot集成具體場景使用最佳實踐 ELK簡介 什么是ELK ELK是一個開源的日志分析平臺&#xff0c;由三個核心組件組成&#xff1a; Elasticsearch: 分布式搜索引擎&#xff0c;用于存儲和檢索日…

【PyTorch】單對象分割項目

對象分割是在圖像中找到目標對象的邊界的過程。單目標分割的重點是自動勾勒出圖像中一個目標對象的邊界。對象邊界通常由二進制掩碼定義。 通過二進制掩碼&#xff0c;可以在圖像上覆蓋輪廓以勾勒出對象邊界。例如以下圖片描繪了胎兒的超聲圖像、胎兒頭部的二進制掩碼以及覆蓋在…

esp dl

放下了好多年 又回到了dl 該忘的也忘的差不多了 其實沒啥復雜的 只是不習慣 熟悉而已 好吧 現代的人工智能體 還是存在著很大的問題 眼睛 耳朵 思考 雖然功能是正常的 但距離&#xff02;真正&#xff02;(&#xff09;意思上的獨立意識個體 還是差別很大 再等個幾十年 看看…

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

基于django/python的服裝銷售系統平臺/服裝購物系統/基于django/python的服裝商城

詳解ThreadLocal<HttpServletRequest> requestThreadLocal

public static ThreadLocal<HttpServletRequest> requestThreadLocal ThreadLocal.withInitial(() -> null);一、代碼逐部分詳解 1. public static public&#xff1a;表示這個變量是公開的&#xff0c;其他類可以訪問。static&#xff1a;表示這是類變量&#xff0c…

Vue2 響應式系統設計原理與實現

文章目錄Vue2 響應式系統設計原理與實現Vue2 響應式系統設計原理與實現 Vue2 的響應式原理主要基于以下幾點&#xff1a; 使用 Object.defineProperty () 方法對數據對象的屬性進行劫持 當數據發生變化時&#xff0c;通知依賴該數據的視圖進行更新 實現一個發布 - 訂閱模式&a…

探索 JUC:Java 并發編程的神奇世界

探索 JUC&#xff1a;Java 并發編程的神奇世界 在 Java 編程領域&#xff0c;隨著多核處理器的普及和應用場景復雜度的提升&#xff0c;并發編程變得愈發重要。Java 并發包&#xff08;JUC&#xff0c;Java.util.concurrent&#xff09;就像是一座寶藏庫&#xff0c;為開發者提…

selenium采集數據怎么應對反爬機制?

selenium是一個非常強大的瀏覽器自動化工具&#xff0c;通過操作瀏覽器來抓取動態網頁內容&#xff0c;可以很好的處理JavaScript和AJAX加載的網頁。 它能支持像點擊按鈕、懸停元素、填寫表單等各種自動化操作&#xff0c;所以很適合自動化測試和數據采集。 selenium與各種主流…

指定文件夾上的壓縮圖像格式tiff轉換為 jpg 批量腳本

文章大綱 背景簡介 代碼 背景簡介 隨著數字成像技術在科研、醫學影像和遙感等領域的廣泛應用,多頁TIFF(Tag Image File Format)文件因其支持多維數據存儲和高位深特性,成為存儲序列圖像、顯微鏡切片或衛星遙感數據的首選格式。然而在實際應用中,這類文件存在以下顯著痛點…

Docker 部署 MySQL 8.0 完整指南:從拉取鏡像到配置遠程訪問

目錄前言一、拉取鏡像二、查看鏡像三、運行容器命令參數說明&#xff1a;四、查看運行容器五、進入容器內部六、修改 MySQL 配置1. 創建配置文件2. 配置內容七、重啟 MySQL 服務八、設置 Docker 啟動時自動啟動 MySQL九、再次重啟 MySQL十、授權遠程訪問1. 進入容器內部2. 登錄…

IntelliJ IDEA 常用快捷鍵筆記(Windows)

前言&#xff1a;特別標注的快捷鍵&#xff08;Windows&#xff09;快捷鍵功能說明Ctrl Alt M將選中代碼提取成方法Ctrl Alt T包裹選中代碼塊&#xff08;try/catch、if、for 等&#xff09;Ctrl H查看類的繼承層次Alt 7打開項目結構面板Ctrl F12打開當前文件結構視圖Ct…