欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis過(guò)期刪除機(jī)制與內(nèi)存淘汰策略的解析指南

 更新時(shí)間:2025年06月10日 15:30:12   作者:拾荒的小海螺  
在使用 Redis 構(gòu)建緩存系統(tǒng)時(shí),很多開(kāi)發(fā)者只設(shè)置了 EXPIRE 但卻忽略了背后 Redis 的過(guò)期刪除機(jī)制與內(nèi)存淘汰策略,下面小編就來(lái)和大家詳細(xì)介紹一下

1、簡(jiǎn)述

在使用 Redis 構(gòu)建緩存系統(tǒng)時(shí),很多開(kāi)發(fā)者只設(shè)置了 EXPIRE 但卻忽略了背后 Redis 的過(guò)期刪除機(jī)制與內(nèi)存淘汰策略。理解這兩者非常關(guān)鍵,直接關(guān)系到你的緩存系統(tǒng)是否高效、穩(wěn)定、可控。

本文將深入剖析 Redis 中的兩類機(jī)制:

  • 過(guò)期刪除策略:key 如何在過(guò)期后被清除?
  • 內(nèi)存淘汰策略:內(nèi)存滿了之后,哪些 key 會(huì)被刪除?

2、Redis 的過(guò)期刪除策略(Key Expiration)

Redis 支持給 key 設(shè)置 TTL(Time To Live),例如:

SET user:1:name "Tom" EX 60  # 設(shè)置60秒后過(guò)期

Redis 有三種過(guò)期刪除策略:

策略名稱觸發(fā)方式特點(diǎn)與代價(jià)
惰性刪除訪問(wèn) key 時(shí)觸發(fā)延遲釋放內(nèi)存,資源占用低,但可能滯留
定期刪除每秒掃描過(guò)期 key有概率清理過(guò)期 key,減緩內(nèi)存膨脹
主動(dòng)刪除內(nèi)存不足時(shí)觸發(fā)與內(nèi)存淘汰策略結(jié)合,主動(dòng)回收

Redis 實(shí)際如何執(zhí)行過(guò)期?

Redis 并不會(huì)在 key 到期的一刻立刻刪除它,而是:

  • 每秒隨機(jī)抽取一批 key 檢查過(guò)期(默認(rèn)每次檢查 20 個(gè))
  • 被訪問(wèn)的 key 會(huì)“惰性檢查”,若過(guò)期就順便刪掉
  • 在內(nèi)存壓力大時(shí),會(huì)加速觸發(fā)清理

3、Redis 內(nèi)存淘汰策略(Eviction Policy)

當(dāng) Redis 達(dá)到最大內(nèi)存上限(由 maxmemory 指定)時(shí),就必須開(kāi)始淘汰舊數(shù)據(jù)。此時(shí)就輪到 內(nèi)存淘汰策略 發(fā)揮作用。

Redis 提供的 8 種淘汰策略:

策略描述
noeviction默認(rèn)策略,拒絕寫(xiě)入新數(shù)據(jù),直接報(bào)錯(cuò)
allkeys-lru所有 key 中,淘汰最近最少使用的
volatile-lru只在設(shè)置了 TTL 的 key 中,淘汰最少使用的
allkeys-random所有 key 中,隨機(jī)淘汰
volatile-random只在設(shè)置了 TTL 的 key 中,隨機(jī)淘汰
volatile-ttl只淘汰 TTL 最短的 key(最早過(guò)期)
volatile-lfu只在設(shè)置了 TTL 的 key 中,淘汰最少頻率使用
allkeys-lfu所有 key 中,淘汰最少頻率使用

配置示例:

maxmemory 512mb
maxmemory-policy allkeys-lru

4、實(shí)踐場(chǎng)景與建議

場(chǎng)景 1:普通緩存場(chǎng)景(推薦)

maxmemory 1gb
maxmemory-policy allkeys-lru

優(yōu)點(diǎn):自動(dòng)替換最不常訪問(wèn)的 key,效果最貼近緩存的預(yù)期行為

使用方式:

SET user:123 "json-data" EX 300

場(chǎng)景 2:數(shù)據(jù)較重要,只刪除過(guò)期 key

maxmemory 1gb
maxmemory-policy volatile-lru

僅淘汰設(shè)置了過(guò)期時(shí)間的 key,持久 key 不被動(dòng)清除

適合混合數(shù)據(jù)結(jié)構(gòu):部分緩存 + 部分持久值

場(chǎng)景 3:用戶限流或驗(yàn)證碼存儲(chǔ)

SET captcha:uid123 "XYZ" EX 60

結(jié)合 volatile-ttl 策略,可以優(yōu)先清理即將過(guò)期的驗(yàn)證碼等

5、示例:模擬淘汰行為

# 配置
CONFIG SET maxmemory 100kb
CONFIG SET maxmemory-policy allkeys-lru

# 插入多個(gè) key
for i in {1..100}; do
  SET "key$i" "$(openssl rand -hex 20)"
done

# 查看哪些 key 被淘汰了
INFO stats | grep evicted

輸出示例:

evicted_keys:57

說(shuō)明有 57 個(gè) key 被自動(dòng)淘汰,Redis 按 LRU 策略生效。

  • 附加建議
  • Redis 淘汰的是“key”,不是“內(nèi)存最占用的值”
  • Redis 7.0+ 中 LFU 策略適合熱點(diǎn)數(shù)據(jù),尤其在流量分布極不均衡時(shí)更精準(zhǔn)
  • 若你使用 Redis 作為數(shù)據(jù)庫(kù)(而非緩存),應(yīng)避免使用淘汰策略,并開(kāi)啟持久化

6、總結(jié)

分類策略類型控制方式推薦場(chǎng)景
過(guò)期刪除策略惰性/定期自動(dòng)所有 Redis 使用
內(nèi)存淘汰策略8 種策略配置項(xiàng)控制緩存系統(tǒng)、高頻數(shù)據(jù)

推薦配置模板

# 設(shè)置最大內(nèi)存限制
maxmemory 512mb

# 設(shè)置淘汰策略
maxmemory-policy allkeys-lru

到此這篇關(guān)于Redis過(guò)期刪除機(jī)制與內(nèi)存淘汰策略的解析指南的文章就介紹到這了,更多相關(guān)Redis過(guò)期刪除與內(nèi)存淘汰內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis實(shí)現(xiàn)全局唯一Id的使用示例

    Redis實(shí)現(xiàn)全局唯一Id的使用示例

    全局唯一ID有多個(gè)方法可供選擇,其中一種是使用Redis,本文就來(lái)介紹一下Redis實(shí)現(xiàn)全局唯一Id的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Linux上安裝Redis詳細(xì)教程

    Linux上安裝Redis詳細(xì)教程

    這篇文章主要給大家詳細(xì)介紹了在Linux上安裝Redis詳細(xì)教程,文中有詳細(xì)的代碼示例和安裝步驟,對(duì)我們學(xué)習(xí)安裝redis有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • 關(guān)于在Redis中使用Pipelining加速查詢的問(wèn)題

    關(guān)于在Redis中使用Pipelining加速查詢的問(wèn)題

    這篇文章主要介紹了在Redis中使用Pipelining加速查詢,Redis是一個(gè)client-server模式的TCP服務(wù),也被稱為Request/Response協(xié)議的實(shí)現(xiàn),本文通過(guò)一個(gè)例子給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2022-05-05
  • Redis實(shí)現(xiàn)UV統(tǒng)計(jì)的示例代碼

    Redis實(shí)現(xiàn)UV統(tǒng)計(jì)的示例代碼

    本文主要介紹了Redis實(shí)現(xiàn)UV統(tǒng)計(jì)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • redis-cli -p 6379 info命令詳解

    redis-cli -p 6379 info命令詳解

    這篇文章主要介紹了redis-cli -p 6379 info命令詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Redis基本數(shù)據(jù)類型Set常用操作命令

    Redis基本數(shù)據(jù)類型Set常用操作命令

    這篇文章主要為大家介紹了Redis基本數(shù)據(jù)類型Set常用操作命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Redis數(shù)據(jù)庫(kù)的安裝和配置教程詳解

    Redis數(shù)據(jù)庫(kù)的安裝和配置教程詳解

    這篇文章主要介紹了Redis數(shù)據(jù)庫(kù)的安裝和配置?,主要包括Linux環(huán)境安裝Redis和windows環(huán)境安裝Redis,redis客戶端安裝方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Redis和Lua使用過(guò)程中遇到的小問(wèn)題

    Redis和Lua使用過(guò)程中遇到的小問(wèn)題

    這篇文章主要給大家介紹了關(guān)于Redis和Lua使用過(guò)程中遇到的小問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • redis延時(shí)隊(duì)列zset實(shí)現(xiàn)的示例

    redis延時(shí)隊(duì)列zset實(shí)現(xiàn)的示例

    延時(shí)隊(duì)列是一種常用的設(shè)計(jì)模式,用于處理那些需要在未來(lái)某個(gè)時(shí)間點(diǎn)執(zhí)行的任務(wù),本文主要介紹了redis延時(shí)隊(duì)列zset實(shí)現(xiàn)的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案

    Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案

    在普通的token頒發(fā)和校驗(yàn)中 當(dāng)用戶發(fā)現(xiàn)自己賬號(hào)和密碼被暴露了時(shí)修改了登錄密碼后舊的token仍然可以通過(guò)系統(tǒng)校驗(yàn)直至token到達(dá)失效時(shí)間,所以系統(tǒng)需要token主動(dòng)失效的一種能力,所以本文給大家介紹了Redis優(yōu)化token校驗(yàn)主動(dòng)失效的實(shí)現(xiàn)方案,需要的朋友可以參考下
    2024-03-03

最新評(píng)論