最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、簡述

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

本文將深入剖析 Redis 中的兩類機制:

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

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

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

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

Redis 有三種過期刪除策略:

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

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

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

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

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

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

Redis 提供的 8 種淘汰策略:

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

配置示例:

maxmemory 512mb
maxmemory-policy allkeys-lru

4、實踐場景與建議

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

maxmemory 1gb
maxmemory-policy allkeys-lru

優(yōu)點:自動替換最不常訪問的 key,效果最貼近緩存的預(yù)期行為

使用方式:

SET user:123 "json-data" EX 300

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

maxmemory 1gb
maxmemory-policy volatile-lru

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

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

場景 3:用戶限流或驗證碼存儲

SET captcha:uid123 "XYZ" EX 60

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

5、示例:模擬淘汰行為

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

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

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

輸出示例:

evicted_keys:57

說明有 57 個 key 被自動淘汰,Redis 按 LRU 策略生效。

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

6、總結(jié)

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

推薦配置模板

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

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

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

相關(guān)文章

  • 一文詳解Redis在Ubuntu系統(tǒng)上的安裝步驟

    一文詳解Redis在Ubuntu系統(tǒng)上的安裝步驟

    安裝redis在Ubuntu上有多種方法,下面這篇文章主要給大家介紹了關(guān)于Redis在Ubuntu系統(tǒng)上安裝的相關(guān)資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2024-07-07
  • 最新評論

    修文县| 兴业县| 观塘区| 安平县| 巴楚县| 乌拉特前旗| 民乐县| 丰县| 河池市| 乌鲁木齐县| 饶平县| 长葛市| 荔波县| 额济纳旗| 兴仁县| 丰原市| 永平县| 呼图壁县| 内江市| 大理市| 大厂| 普陀区| 通许县| 葫芦岛市| 遂溪县| 凤阳县| 梨树县| 攀枝花市| 潞西市| 永福县| 石阡县| 江阴市| 炉霍县| 乡城县| 怀宁县| 通渭县| 赤峰市| 海盐县| 日照市| 马山县| 林西县|