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

Redis過(guò)期數(shù)據(jù)清理的策略實(shí)戰(zhàn)

 更新時(shí)間:2025年08月25日 10:01:13   作者:碼農(nóng)技術(shù)棧  
Redis中的過(guò)期鍵過(guò)期后不會(huì)立即從內(nèi)存中刪除,而是在后臺(tái)進(jìn)程中異步清理,如果不清理過(guò)期數(shù)據(jù),Redis內(nèi)存中的數(shù)據(jù)會(huì)越來(lái)越多,在實(shí)際應(yīng)用中,Redis 的過(guò)期數(shù)據(jù)淘汰策略可以通過(guò)多種方式實(shí)現(xiàn),以下是基于惰性刪除和定期刪除兩種機(jī)制的示例代碼以及最佳實(shí)踐

一句話真相:Redis的過(guò)期清理就像"超市臨期商品管理"——惰性刪除是顧客結(jié)賬時(shí)檢查保質(zhì)期,定期刪除是店員定時(shí)巡檢貨架!

一、為什么需要數(shù)據(jù)過(guò)期??jī)?nèi)存管理的生死線

真實(shí)案例:某社交App因未設(shè)過(guò)期時(shí)間,3000萬(wàn)用戶會(huì)話數(shù)據(jù)永久堆積,導(dǎo)致:

  • 內(nèi)存爆滿,服務(wù)崩潰
  • 從Redis恢復(fù)數(shù)據(jù)耗時(shí)3小時(shí)
  • 直接損失800萬(wàn)訂單!

Redis內(nèi)存警告:

127.0.0.1:6379> info memory  
used_memory_human:6.0G   # 內(nèi)存使用量  
maxmemory_human:8.0G     # 內(nèi)存上限  
mem_fragmentation_ratio:1.8  # 碎片率過(guò)高!  

二、過(guò)期策略雙核心:惰性刪除 + 定期刪除

策略觸發(fā)時(shí)機(jī)優(yōu)點(diǎn)缺點(diǎn)
惰性刪除訪問(wèn)Key時(shí)檢查零額外CPU消耗冷數(shù)據(jù)長(zhǎng)期不釋放
定期刪除定時(shí)隨機(jī)掃描主動(dòng)釋放內(nèi)存可能短時(shí)阻塞

三、惰性刪除:精準(zhǔn)狙擊的"特工"

1. 執(zhí)行流程

客戶端Redis過(guò)期字典GET user:1001:session檢查key是否過(guò)期?已過(guò)期(返回1)刪除key(nil)客戶端Redis過(guò)期字典

2. 源碼實(shí)現(xiàn)(C語(yǔ)言偽代碼)

int expireIfNeeded(redisDb *db, robj *key) {  
    if (!keyIsExpired(db,key)) return 0;  // 未過(guò)期  
    deleteKey(db,key);                   // 執(zhí)行刪除  
    return 1;  
}  

robj *lookupKeyRead(redisDb *db, robj *key) {  
    if (expireIfNeeded(db,key) == 1) {   // 檢查過(guò)期  
        return NULL;  // 已刪除返回空  
    }  
    return lookupKey(db,key);  
}  

3. 實(shí)戰(zhàn)風(fēng)險(xiǎn):僵尸Key問(wèn)題

場(chǎng)景:

# 大量已過(guò)期但永不訪問(wèn)的Key  
SET access_log:20230101 "big_data" EX 86400  

后果:內(nèi)存被無(wú)形占用,可用空間持續(xù)減少!

四、定期刪除:主動(dòng)出擊的"巡邏隊(duì)"

1. 三層漸進(jìn)式掃描

2. 核心算法參數(shù)

// redis.conf 配置  
hz 10  // 每秒執(zhí)行10次定期刪除(默認(rèn))  

// 源碼參數(shù)  
#define ACTIVE_EXPIRE_CYCLE_KEYS_PER_LOOP 20 // 每次掃描20個(gè)key  
#define ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC 25 // CPU占用≤25%  

3. 性能優(yōu)化:自適應(yīng)掃描

  • CPU空閑時(shí):增加掃描頻次(hz 100
  • 內(nèi)存緊張時(shí):每次掃描更多Key(可調(diào)參)

五、內(nèi)存耗盡時(shí)的最后防線:淘汰策略

當(dāng)內(nèi)存超maxmemory時(shí)觸發(fā):

策略機(jī)制適用場(chǎng)景
volatile-lru(默認(rèn))淘汰最近最少使用的過(guò)期Key緩存場(chǎng)景
allkeys-lru淘汰所有Key中的LRU內(nèi)存不足時(shí)優(yōu)先選擇
volatile-ttl淘汰剩余生存時(shí)間最短的Key時(shí)效性敏感數(shù)據(jù)
noeviction拒絕寫入并報(bào)錯(cuò)關(guān)鍵數(shù)據(jù)不允許丟失

配置方式:

# redis.conf  
maxmemory 8gb  
maxmemory-policy volatile-lru  

六、四大實(shí)戰(zhàn)陷阱與解決方案

陷阱1:過(guò)期Key集中導(dǎo)致雪崩

場(chǎng)景:

# 同一秒設(shè)置大量Key過(guò)期  
SET key1 value EX 3600  
SET key2 value EX 3600  # 同時(shí)設(shè)置100萬(wàn)Key  

后果:3600秒后同時(shí)過(guò)期 → 定期刪除壓力暴增!

解決方案:

# 添加隨機(jī)過(guò)期時(shí)間偏移  
expire_time = 3600 + random.randint(0, 600)  # 增加0-10分鐘隨機(jī)值  
redis.setex(key, expire_time, value)  

陷阱2:大Key刪除阻塞服務(wù)

案例:刪除10MB的Hash Key耗時(shí)150ms → 阻塞其他請(qǐng)求!

優(yōu)化方案:

# 異步刪除(Redis 4.0+)  
UNLINK big_key  # 非阻塞刪除  

# 分批次刪除  
HSCAN big_key 0 COUNT 100  # 分批遍歷  
HDEL big_key field1 field2 ...  # 分批刪除  

陷阱3:主從不一致

問(wèn)題:主庫(kù)刪除過(guò)期Key后,從庫(kù)可能未同步刪除

解決方案:

# 開(kāi)啟從庫(kù)主動(dòng)檢測(cè)(Redis 3.2+)  
replica-serve-stale-data no  

陷阱4:持久化導(dǎo)致過(guò)期復(fù)活

原理:RDB快照中的過(guò)期Key重啟后重新加載

規(guī)避方法:

# 啟用AOF重寫時(shí)主動(dòng)刪除過(guò)期Key  
aof-rewrite-incremental-fsync yes  

七、最佳配置指南

1. 生產(chǎn)環(huán)境推薦配置

# 內(nèi)存上限(物理內(nèi)存70%)  
maxmemory 16gb  

# 淘汰策略(緩存場(chǎng)景)  
maxmemory-policy volatile-lru  

# 定期刪除頻率  
hz 10  

# 開(kāi)啟異步刪除  
lazyfree-lazy-eviction yes  

2. 監(jiān)控命令大全

# 查看過(guò)期Key數(shù)量  
redis-cli info | grep expired_keys  

# 內(nèi)存碎片率  
redis-cli info | grep mem_fragmentation_ratio  

# 實(shí)時(shí)監(jiān)控淘汰情況  
redis-cli --stat  

八、總結(jié):Redis過(guò)期數(shù)據(jù)清理三原則

  1. 雙重保障:
    • 訪問(wèn)時(shí)檢查(惰性刪除)
    • 定時(shí)主動(dòng)掃描(定期刪除)
  2. 淘汰兜底:內(nèi)存不足時(shí)按策略清理
  3. 避坑關(guān)鍵:
    • 分散過(guò)期時(shí)間
    • 大Key異步刪除
    • 監(jiān)控碎片率

黃金口訣:

  • 冷門數(shù)據(jù)靠定期掃
  • 熱點(diǎn)訪問(wèn)惰性刪
  • 內(nèi)存爆炸淘汰保

以上就是Redis過(guò)期數(shù)據(jù)清理的策略實(shí)戰(zhàn)的詳細(xì)內(nèi)容,更多關(guān)于Redis過(guò)期數(shù)據(jù)清理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Redis中List類型的常用命令

    Redis中List類型的常用命令

    本文主要介紹了Redis中List類型的常用命令,包含12種常用命令,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • Redis連接超時(shí)異常的處理方法

    Redis連接超時(shí)異常的處理方法

    這篇文章主要給大家介紹了關(guān)于Redis連接超時(shí)異常的處理方法,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN)

    Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN)

    這篇文章主要介紹了Redis遍歷所有key的兩個(gè)命令(KEYS 和 SCAN),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)

    Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)

    本文介紹了Redis集群服務(wù)器的優(yōu)勢(shì),為讀者提供了全面的Redis集群服務(wù)器知識(shí)和使用技巧,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • redis 限制內(nèi)存使用大小的實(shí)現(xiàn)

    redis 限制內(nèi)存使用大小的實(shí)現(xiàn)

    這篇文章主要介紹了redis 限制內(nèi)存使用大小的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 關(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
  • Spring?Boot實(shí)戰(zhàn)解決高并發(fā)數(shù)據(jù)入庫(kù)之?Redis?緩存+MySQL?批量入庫(kù)問(wèn)題

    Spring?Boot實(shí)戰(zhàn)解決高并發(fā)數(shù)據(jù)入庫(kù)之?Redis?緩存+MySQL?批量入庫(kù)問(wèn)題

    這篇文章主要介紹了Spring?Boot實(shí)戰(zhàn)解決高并發(fā)數(shù)據(jù)入庫(kù)之?Redis?緩存+MySQL?批量入庫(kù)問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄

    一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄

    這篇文章主要給大家分享了一次關(guān)于Redis內(nèi)存詭異增長(zhǎng)的排查過(guò)程實(shí)戰(zhàn)記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • mac下設(shè)置redis開(kāi)機(jī)啟動(dòng)方法步驟

    mac下設(shè)置redis開(kāi)機(jī)啟動(dòng)方法步驟

    這篇文章主要介紹了mac下設(shè)置redis開(kāi)機(jī)啟動(dòng),本文詳細(xì)的給出了操作步驟,需要的朋友可以參考下
    2015-07-07
  • redis部署及各種數(shù)據(jù)類型使用命令詳解

    redis部署及各種數(shù)據(jù)類型使用命令詳解

    這篇文章主要介紹了redis部署及各種數(shù)據(jù)類型使用命令,編譯安裝redis及部署過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

通江县| 吐鲁番市| 嘉峪关市| 赤壁市| 巴马| 安远县| 珠海市| 进贤县| 双柏县| 习水县| 泸水县| 华容县| 澄迈县| 宾川县| 南部县| 衡阳县| 珠海市| 韶山市| 桐乡市| 南皮县| 嫩江县| 五寨县| 喀什市| 韩城市| 永川市| 高雄县| 拉萨市| 吴江市| 鄂尔多斯市| 饶平县| 沭阳县| 工布江达县| 皮山县| 丰都县| 康平县| 岑巩县| 黄山市| 海原县| 延吉市| 历史| 大荔县|