redis key過期后會立馬刪除嗎

Redis 的 Key 過期后不會立即被刪除。Redis 采用了一種結合 ?惰性刪除 (Lazy Expiration)?? 和 ?定期刪除 (Periodic Expiration)?? 的策略來管理過期 Key 的回收,這是為了在內存管理、性能和 CPU 開銷之間取得平衡。

📌 Redis 過期 Key 刪除的兩種策略

🔍 1. ?惰性刪除 (Lazy Expiration)??
  • ?觸發時機?:當客戶端嘗試訪問一個 Key 時,Redis 會先檢查這個 Key 是否已過期。
  • ?執行過程?:
    • 如果 Key 已過期,Redis 會立即刪除它,并返回?nil?給客戶端(就像這個 Key 不存在一樣)。
    • 如果 Key 未過期,則正常返回其值。
  • ?優點?:
    • ?CPU 友好?:只在訪問時檢查,不占用額外 CPU 資源掃描過期 Key。
    • ?簡單高效?:對未過期的 Key 沒有額外開銷。
  • ?缺點?:
    • ?內存可能未及時釋放?:如果某個過期 Key 長時間不被訪問,它會一直占用內存,直到被訪問或通過定期刪除被清理。這可能導致內存浪費(內存泄漏假象)。
? 2. ?定期刪除 (Periodic Expiration / Probabilistic Algorithm)??
  • ?觸發時機?:Redis 會 ?周期性? 地(默認每秒運行 10 次,可通過?hz?配置調整)隨機抽取一部分設置了過期時間的 Key 進行檢查。
  • ?執行過程?:
    1. 從設置了過期時間的 Key 集合中,?隨機抽取? 一定數量的 Key(數量由配置控制)。
    2. 檢查這些被抽中的 Key 是否過期。
    3. 刪除所有已過期的 Key。
    4. 如果本輪抽查中過期 Key 的比例 ?超過 25%?,則立即重復步驟 1?(繼續抽查并刪除),直到比例低于 25% 或達到時間/次數限制。
  • ?優點?:
    • ?減少內存浪費?:即使 Key 不被訪問,也有機會被清理掉。
    • ?可控的 CPU 開銷?:通過控制抽查頻率 (hz) 和每次抽查的數量,可以限制對 CPU 的影響。
  • ?缺點?:
    • ?非實時?:過期 Key 不會在過期那一刻被立即刪除,會有一定的延遲(通常在秒級)。
    • ?可能遺漏?:如果過期 Key 比例很低或運氣不好沒被抽中,可能暫時不會被刪除。

📊 總結:Key 何時會被刪除?

場景刪除機制延遲性
?Key 過期后被訪問?惰性刪除立即刪除實時(訪問時觸發)
?Key 過期后未被訪問,但被定期刪除抽中?定期刪除清理秒級延遲(取決于抽查頻率和運氣)
?Key 過期后長期未被訪問且未被抽中?可能滯留內存不確定(直到被訪問或抽中)

?? 注意事項與影響

  1. ?內存占用?:大量過期 Key 未被及時刪除會導致 Redis ?實際內存使用量高于有效數據量。監控時需關注?expired_keys?(累計刪除數) 和?evicted_keys?(因內存不足被淘汰數) 指標。
  2. ?內存淘汰策略?:如果 Redis 配置了?maxmemory?且內存不足,即使 Key 未過期也可能根據策略(如?allkeys-lru)被淘汰。而過期 Key 滯留會加速觸發內存淘汰,可能導致有用的 Key 被誤刪。
  3. ?性能影響?:定期刪除的 CPU 開銷取決于?hz?設置和過期 Key 數量。過高頻率的抽查會增加 CPU 負擔。
  4. ?命令影響?:像?KEYS *?或?SCAN?命令可能會返回已過期但尚未被刪除的 Key(但在返回前會觸發惰性刪除)。

🛠? 如何應對過期 Key 滯留問題?

  1. ?監控告警?:監控 Redis 的?used_memoryexpired_keysevicted_keys?等指標,設置內存使用閾值告警。
  2. ?**調整?hz**?:適當增加?hz?值(如從 10 調整到 100)可提高定期刪除頻率,加速清理過期 Key,但會增加 CPU 負載(需權衡)。
  3. ?避免大量 Key 同時過期?:對大量 Key 設置過期時間時,添加隨機因子(如?TTL = base + random(0, 300)),防止集中過期導致內存陡增或定期刪除壓力大。
  4. ?使用?MEMORY PURGE?命令 (Redis 4.0+)??:手動觸發內存清理(非標準命令,部分云服務商支持)。
  5. ?升級 Redis 版本?:新版 Redis 在內存管理和過期策略上可能有優化(如 Redis 6.0 的惰性刪除線程)。

💎 結論

Redis 為了性能犧牲了過期 Key 刪除的實時性。理解其 ?惰性刪除 + 定期刪除? 的組合策略,對于診斷內存異常、優化配置和保障系統穩定性至關重要。務必監控內存指標,并根據業務場景調整相關參數。

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

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

相關文章

關于 React 19 的四種組件通信方法

注意:使用的是UI庫是 antd-mobile1.父子級組件通信父組件單向數據流:數據從父組件流向子組件。支持多種數據類型:字符串、數字、對象、數組、函數等。只讀性:子組件不能直接修改 props 中的數據。import { useState } from react …

OC-單例模式

文章目錄單例模式定義特點使用原因缺點模式介紹懶漢模式同步鎖實現dispatch_once餓漢模式實現總結懶漢模式優點缺點餓漢模式優點缺點單例模式 定義 單例模式,簡單的說就是一個類始終只對應同一個對象,每次獲取這個類的對象獲得的都是同一個實例 如果一…

[論文閱讀] 算法 | 抗量子+緊湊!SM3-OTS:基于國產哈希算法的一次簽名新方案

抗量子緊湊!SM3-OTS:基于國產哈希算法的一次簽名新方案 論文信息信息類別具體內容論文原標題SM3-OTS: 基于國密算法SM3的緊湊型后量子一次簽名方案主要作者楊亞濤、殷方銳、陳亮宇、潘登研究機構1. 北京電子科技學院 電子與通信工程系(北京 1…

C語言-指針用法概述

目錄 1.指針基礎概念 2. 指針與數組 3. 指針作為函數參數 4. 動態內存分配 5. 指針的高級用法 6. 常見錯誤與注意事項 7. 指針數組 vs. 數組指針 8.總結與建議 本文主要作為指針用法的復習,會對指針的大致用法進行舉例和概述。 1.指針基礎概念 ?什…

Java調用Whisper和Vosk語音識別(ASR)模型,實現高效實時語音識別(附源碼)

簡介 語音識別(Automatic Speech Recognition, ASR)是將人類的語音信號自動轉換為對應文字的技術,它使計算機能夠“聽懂”人說的話,是人機語音交互的核心技術,廣泛應用于智能助手、語音輸入、客服系統等場景。 現在我…

第3周 機器學習課堂記錄

1.學習問題的分類有監督的學習分類回歸無監督學習聚類密度估計:確定輸入空間中的數據的分布可視化:把高位空間中的數據投影到二維或三維空間強化學習不給定最優輸出的示例,而是通過試錯發現最優輸出2.泛化versus過度擬合背景引入:…

消息隊列(MQ)高級特性深度剖析:詳解RabbitMQ與Kafka

一、引言:為什么需要關注高級特性? 在現代分布式系統架構中,消息隊列(Message Queue)已成為不可或缺的核心組件。初級使用消息隊列可能只需幾行代碼就能實現基本功能,但要真正發揮其在大規模生產環境中的威…

【GPT入門】第65課 vllm指定其他卡運行的方法,解決單卡CUDA不足的問題

【GPT入門】第65課 vllm指定其他卡運行的方法,解決單卡CUDA不足的問題1.原理說明:2.實踐1.原理 要將 vllm 部署在第二張 GPU 卡上(設備編號為 1),只需在命令前添加 CUDA_VISIBLE_DE…

Spring Boot Actuator自定義指標與監控實踐指南

Spring Boot Actuator自定義指標與監控實踐指南 本篇文章以生產環境實戰經驗為主線,結合某電商系統的業務場景,講解如何在Spring Boot Actuator中添加并暴露自定義指標,并使用Prometheus和Grafana進行完整的監控與告警配置。 一、業務場景描述…

Vue報錯<template v-for=“option in cardOptions“ :key=“option.value“>

在Vue項目中遇到報錯&#xff0c;原因是模板中使用了<template>標簽內的v-for指令&#xff0c;而當前Vue版本不支持此用法。解決方案是移除<template>標簽&#xff0c;直接在<el-option>上使用v-for。同時優化計算屬性cardOptions&#xff0c;使其能夠兼容歷…

人工智能學習:Transformer結構中的規范化層(層歸一化)

Transformer結構中的規范化層(層歸一化) 一、規范化層(層歸一化)介紹 概念 層歸一化(Layer Normalization) 是一種用于提高深度神經網絡訓練穩定性和加速收斂的技術,廣泛應用于現代深度學習模型中,尤其是在Transformer等序列建模網絡中。它通過對每一層的輸出進行歸一化…

盼之代售 最新版 decode__1174

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 部分python代碼 cp1 execj…

Transformer系列 | Pytorch復現Transformer

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、Transformer和Seq2Seq 在之前的博客中我們學習了Seq2Seq(深度學習系列 | Seq2Seq端到端翻譯模型)&#xff0c;知曉了Attention為RNN帶來的優點。那么有沒有…

【MySQL】常用SQL語句

介紹常用的DDL語句、DML語句基本語法分號結尾使用空格和縮進不區分大小寫--或#注釋單行內容 /*注釋多行內容*/DDL數據定義語句&#xff1a;定義數據庫、表、字段一、操作庫-- 創建庫create database db1;-- 創建庫是否存在&#xff0c;不存在則創建create database if not exi…

云手機就是虛擬機嗎?

云手機并非等同于虛擬機&#xff0c;盡管二者存在一定相似性&#xff0c;但有著諸多區別&#xff0c;以下從多個方面來分析&#xff1a;云手機是一種基于云計算技術&#xff0c;將云端服務器虛擬化為手機設備&#xff0c;用戶能通過網絡遠程操控的虛擬手機服務&#xff0c;它從…

準確--Nginx 1.28.0 安裝與配置流程

Nginx 1.28.0 安裝與配置流程 1. 下載與解壓 cd ~ wget http://nginx.org/download/nginx-1.28.0.tar.gz tar -zxvf nginx-1.28.0.tar.gz cd nginx-1.28.02. 配置編譯參數 ./configure \--prefix/home/ynnewweb/nginx \--with-http_ssl_module \--with-http_gzip_static_module…

無標記點動捕新范式:Xsens系統助力人形機器人實現毫米級動作復刻

Xsen搭載Manus數據手套在機器人操作與機器學習中的應用當前&#xff0c;人形機器人正加速向工業裝配、家庭陪護、倉儲物流等場景滲透&#xff0c;而 “如何讓機器人的動作既符合人類運動規律&#xff0c;又能實現高精度執行” 成為制約其落地的核心瓶頸。Xsens 高精度全身動捕系…

mysql57超管root忘記密碼怎么辦

目錄 背景 1.首先停止數據庫 2.使用免密模式啟動 3.修改密碼 3.1刷新權限配置 3.2修改密碼 4.殺掉mysql 5.重新正常啟動mysql 6.查看mysql狀態 7.驗證 7.1首先服務器本地驗證 7.2遠程驗證 背景 數據庫密碼忘記了,急的抓耳撓腮,怎么也想不起來,于是就開始重置吧 1.…

RESTful API:@RequestParam與@PathVariable實戰對比

RequestParam vs PathVariable 在刪除和查找操作中的使用差異 在項目實戰中&#xff0c;選擇使用 RequestParam 還是 PathVariable 來接收ID參數&#xff0c;通常基于以下幾個考慮因素&#xff1a; 1. RESTful API 設計原則 查找操作使用 PathVariable GetMapping("/depts…

劇本殺小程序系統開發:開啟沉浸式社交娛樂新紀元

在當今數字化浪潮席卷的時代&#xff0c;社交娛樂方式正經歷著前所未有的變革。劇本殺&#xff0c;這一融合了角色扮演、推理懸疑與社交互動的線下娛樂項目&#xff0c;近年來迅速風靡全國&#xff0c;成為年輕人熱衷的社交新寵。而隨著移動互聯網的蓬勃發展&#xff0c;劇本殺…