Redis_緩存2_緩存刪除和淘汰策略

14.5 緩存數據的刪除和替換

14.5.1 過期數據

可以使用ttl查看key的狀態。已過期的數據,redis并未馬上刪除。優先去執行讀寫數據操作,刪除操作延后執行。

14.5.2 刪除策略

redis中每一個value對應一個內存地址,在expires,一個內存地址,對應一個時間截,如果達到指定時間,就完成刪除處理
在這里插入圖片描述
三種刪除策略

  • 定時刪除:創建一個定時器,當key設置過期時間已到達,刪除key,同時expires中也刪除

    • 優點:節約內存
    • 缺點:對于cpu實時處理壓力影響,對redis執行的效率有影響
  • 惰性刪除:數據到達過期時間,先不做刪除,直到下次訪問該數據時,再做刪除(以空間換時間

    • 執行流程:在get數據時,先執行redis中一個內部函數 expireIfNeeded(),如果沒有過期,就返回,如果已過期,就刪除,返回-2
    • 優點:節約CPU資源
    • 缺點:內存占用過大。
  • 定期刪除

    • redis啟動服務時,讀取server.hz的值,默認為10,可以通過info server指令查看
    • 每秒鐘執行server.hz次定時輪詢,調用serverCron()函數,函數中又執行databasesCron(),對16數據庫進行輪詢,執行了activeExpireCycle(),檢測其中元素的過期情況。每次輪詢都執行250ms/server.hz時長。隨機從對應的庫中抽取20個(默認)key進行檢測
    • 如果key已過期,則刪除key
    • 如果一輪中刪除的key數量>w*25%,則再次循環剛才的過程
    • 如果一輪中刪除的key數量<=w*25%,則開始檢查下一個庫

redis中使用惰性刪除和定期刪除

14.5.3 逐出算法

通過 配置文件 maxmemory < bytes>來設置最大緩存容量。一般情況,建議設置為總數據的15%到30%,在實際生產環境下,可以設置50%。如果不設置,默認全部使用

redis緩存淘汰策略

淘汰策略
noevction不淘汰
進行數據淘汰
過期數據淘汰
所有數據淘汰
volatile-lru
volatile-lfu
volatile-ttl
volatile-random
allkeys-lru
allkeys-lfu
allkeys-random

在redis默認情況下,不進行數據淘汰noevction,一旦緩存被寫滿了,再有寫請求,redis直接返回錯誤。

過期數據淘汰策略,先限定了,數據都是在過期范圍。

  • valotile-ttl:在進行篩選時,根據過期時間先后順序進行一個刪除,越早過期的越先被刪除
  • valotile-random:在設置了過期時間的鍵值對中,進行隨機刪除
  • valotile-lru:會使用LRU算法篩選設置了過期的鍵值對
  • valotile-lfu:會使用LFU算法篩選設置了過期的鍵值對

所有數據淘汰策略:

  • allkeys-random:從所有鍵值對中隨機篩選并刪除
  • allkeys-lru:從所有鍵值對中采用LRU算法進行篩選刪除
  • allkeys-lfu:從所有鍵值對中采用LFU算法進行篩選刪除

LRU算法
算法Least Recently Used,最近最少使用原則,最近不用的數據會被篩選出來,最近頻繁使用的數據會保留

lru算法,需要使用鏈表來管理所有緩存數據,帶來內存開銷。有數據被訪問時,需要執行鏈表數據的移動,會降低redis性能。

記錄數據最后一次訪問的時間截,第一次會隨機選出N個數據,作為一個候選集合,作一個排序,再把lru最小的數據進行淘汰

上面提到的N的配置:maxmemory-samples 5

LFU算法
算法Least Frequently Used,最不常用原則。根據歷史訪問頻率來淘汰數據。

每個數據塊都有一個引用計數,按引用計數來排序。如果引用計數相同,按照時間排序

  • 新加入的數據放在隊尾,引用計為1
  • 當數據被訪問,引用計數增加,隊列重排
  • 當需要淘汰數據時,將隊列尾部的數據塊刪除

逐出算法選擇:maxmemory-policy noeviction

  • 優先使用allkeys-lru策略。
  • 如果業務數據訪問頻率差別不大,可以建議使用allkeys-random。
  • 首推的新聞、置頂視頻,不設置過期時間,可以建議使得volatile-lru。

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

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

相關文章

BC117 小樂樂走臺階(附完整代碼)

描述 小樂樂上課需要走n階臺階&#xff0c;因為他腿比較長&#xff0c;所以每次可以選擇走一階或者走兩階&#xff0c;那么他一共有多少種走法&#xff1f; 輸入描述 輸入包含一個整數n (1 ≤ n ≤ 30) 輸出描述 輸出一個整數&#xff0c;即小樂樂可以走的方法數。 思路&a…

分享個試卷去筆跡什么軟件,幾個步驟輕松擦除

試卷擦去筆跡是一項非常關鍵的技能&#xff0c;它可以幫助你更好地管理你的筆記和文件。不管是小伙伴們想重新測試試卷或者是將試卷輸出為電子版&#xff0c;都可以實現的。在這篇文章中&#xff0c;我將分享一些方法和軟件&#xff0c;幫助你更好地進行試卷擦除。有需要的小伙…

個人博客系統測試報告

文章目錄 一、功能測試1.編寫測試用例2.總結測試后發現的BUG 二、UI自動化測試0.搭建測試環境1. 創建公共類2.注冊頁面UI自動化測試用例編寫3.登錄頁面UI自動化測試用例編寫4.用戶博客列表頁面自動化測試5. 修改個信息頁面6. 文章編輯頁面7. 設置密保問題發現bug 8. 所有用戶文…

Stable Diffusion +EbSynth應用實踐和經驗分享

Ebsynth應用 1.安裝ffmpeg 2.安裝pip install transparent-background,下載模型https://www.mediafire.com/file/gjvux7ys4to9b4v/latest.pth/file 放到C:\Users\自己的用戶名.transparent-background\加一個ckpt_base.pth文件 3.秋葉安裝ebsynth插件,重啟webui 填寫項目基本…

Redis 持久化及集群架構

Redis 持久化及集群架構 本篇技術博文將深入探討 Redis 持久化機制的原理、配置和使用方式。我們將介紹兩種常用的持久化方式&#xff1a;RDB 持久化和 AOF 持久化。您將了解到它們的工作原理、優缺點以及如何根據需求選擇合適的持久化方式。 通過深入學習 Redis 持久化及集群…

Rest 優雅的url請求處理風格及注意事項

&#x1f600;前言 本篇博文是關于Rest 風格請求的應用和注意事項&#xff0c;希望能夠幫助到您&#x1f60a; &#x1f3e0;個人主頁&#xff1a;晨犀主頁 &#x1f9d1;個人簡介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以幫助到大家&#xff0c;您…

應急響應-Webshell

文章目錄 一、Webshell概述什么是WebshellWebshell分類基于編程語言基于文件大小/提供的功能多少 Webshell 檢測方法 二、常規處置方法三、技術指南1、初步預判2、 Webshell排查3、Web日志分析&#xff08;查找攻擊路徑及失陷原因&#xff09;4、系統排查4.1 Windows4.2 Linux …

CSS中的position屬性有哪些值,并分別描述它們的作用。

聚沙成塔每天進步一點點 ? 專欄簡介? static? relative? absolute? fixed? sticky? 寫在最后 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 記得點擊上方或者右側鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅&#xff01;這個專欄是為那…

通達OA SQL注入漏洞【CVE-2023-4166】

通達OA SQL注入漏洞【CVE-2023-4166】 一、產品簡介二、漏洞概述三、影響范圍四、復現環境POC小龍POC檢測工具: 五、修復建議 免責聲明&#xff1a;請勿利用文章內的相關技術從事非法測試&#xff0c;由于傳播、利用此文所提供的信息或者工具而造成的任何直接或者間接的后果及損…

C/C++ 標準模版庫STL(持續更新版)

標準模版庫STL <algorithm> 算法庫 max, min 用于找出一組值中的最大值和最小值 swap 用于交換兩個變量的值 sort 用于對一個范圍內的元素進行排序 lower_bound, upper_bound 用于在已排序的容器中查找元素的下界和上界 unique(a,an)-a 用于在一個范圍內刪除相鄰重…

新的 Python URL 解析漏洞可能導致命令執行攻擊

Python URL 解析函數中的一個高嚴重性安全漏洞已被披露&#xff0c;該漏洞可繞過 blocklist 實現的域或協議過濾方法&#xff0c;導致任意文件讀取和命令執行。 CERT 協調中心&#xff08;CERT/CC&#xff09;在周五的一份公告中說&#xff1a;當整個 URL 都以空白字符開頭時&…

在 docker 中快速啟動 Apache Hive

介紹 在偽分布式模式下&#xff0c;在Docker容器內運行Apache Hive&#xff0c;可以提供以下功能&#xff1a;快速啟動/調試/為Hive準備測試環境。 快速開始 1. 拉取鏡像 從DockerHub&#xff1a;https://hub.docker.com/r/apache/hive/tags中拉取鏡像。目前發布了3個鏡像&…

gitlab修改遠程倉庫地址

目錄 背景&#xff1a; 解決&#xff1a; 1.刪除本地倉庫關聯的遠程地址&#xff0c;添加新的遠程倉庫地址 2.直接修改本地倉庫關聯的遠程倉庫地址 3.打開.git隱藏文件修改遠程倉庫地址 4.拉取代碼報錯(git host key verification failed) 背景&#xff1a; 公司搬家&#…

數字圖像處理 - 圖像處理結合機器學習的應用示例

在本文中,特別關注樹葉分類機器學習技術的實現。我們的目標是演示如何利用機器學習算法來分析一系列葉子照片,從而實現準確分類并提供對植物領域有價值的算法。 圖像處理中機器學習的本質 機器學習使計算機能夠學習模式并根據視覺數據進行預測,徹底改變了圖像處理領域。在葉…

image has dependent child images

問題&#xff1a;很多none的鏡像無法被刪除 解決過程&#xff1a; 1、通過 docker image prune -f 提示可刪除為 0 2、直接進行刪除報錯&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

銀河麒麟安裝php7.1.33

銀河麒麟V10兼容CentOS 8 安裝過程與CentOS類似。 TencentOS3.1安裝PHPNginxredis測試系統_樂大師的博客-CSDN博客 可以參考之前我寫的文章。 不過有2個細節不同&#xff0c;下面說下。 問題1&#xff1a;編譯錯誤提示“error:off_t undefined” 解決方法&#xff1a; 編…

TCP收發信息(C++)

目錄 一、介紹 二、收數據 三、發數據 一、介紹 tcp和udp的區別之一&#xff0c;即tcp是有連接的&#xff0c;udp是無連接的&#xff0c;udp收發數據的代碼可以獨立運行&#xff0c;tcp發數據前必須確保收數據的一方是打開的&#xff0c;否則無法建立連接。 二、收數據 tc…

宋浩線性代數筆記(五)矩陣的對角化

本章的知識點難度和重要程度都是線代中當之無愧的T0級&#xff0c;對于各種雜碎的知識點&#xff0c;多做題復盤才能良好的掌握&#xff0c;良好掌握的關鍵點在于&#xff1a;所謂的性質A與性質B&#xff0c;是誰推導得誰~

MyBatis的SqlSession使用步驟

對MyBatis的SqlSession理解 SqlSession是 MyBatis 框架中的一個接口&#xff0c;用于執行與數據庫相關的操作。它提供了一系列方法&#xff0c;用于查詢、插入、更新和刪除數據等數據庫操作。 SqlSession接口是通過SqlSessionFactory創建的&#xff0c;每個SqlSession實例都代…

Ubuntu22.04復現SHADEWACHER(手動安你就慢了)

因為我是打算跑TC數據集&#xff0c;所以跳過audit安裝。 我的Ubuntu使用的是清華源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04換什么源都會導致無法定位軟件包&#xff0c;添加neo4j的官方源又會導致不信任的源。 22.04以下的版本&#xff0c;直接用命…