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

Redis刪除過期key策略詳解

 更新時間:2023年10月18日 11:09:48   作者:fking86  
Redis是一款高性能的開源內(nèi)存數(shù)據(jù)庫,廣泛應(yīng)用于緩存、消息隊列、實時分析等場景,在Redis中,我們經(jīng)常需要刪除過期的key,以釋放內(nèi)存空間并保持數(shù)據(jù)的有效性,本文將為您詳細介紹Redis的過期key刪除策略,幫助您更好地管理和優(yōu)化Redis數(shù)據(jù)庫

Redis中key的的過期時間

Redis 中可以為 key 設(shè)置過期時間,到期后 key 會自動被刪除,過期時間可以通過以下幾種方式設(shè)置:

在創(chuàng)建 key 時使用 EXPIRE 命令設(shè)置過期時間(秒級)

示例:

EXPIRE key1 30 # 30秒過期

使用 EXPIREAT 命令設(shè)置一個精確的過期時間(unix 時間戳)

示例:

EXPIREAT key2 1651811000 # 2022-05-06 14:30:00 過期

使用 PEXPIRE 命令設(shè)置過期時間(毫秒級)

示例:

PEXPIRE key3 6000 # 6秒過期

使用 PEXPIREAT 命令設(shè)置毫秒級精確過期時間

示例:

PEXPIREAT key4 1651811000000 # 2022-05-06 14:30:00.000過期 

在 Redis 配置文件中設(shè)置所有 key 的默認過期時間

通過 default-ttl 參數(shù)配置默認過期時間

# redis.conf
default-ttl 3600 # 默認1小時過期

使用 PERSIST 命令可以移除一個 key 的過期時間設(shè)置

PERSIST key2 # 移除key2的過期時間

使用 TTL 命令可以查看一個 key 剩余的過期時間

TTL key3 # 查看key3的剩余過期時間

Redis 提供了靈活的 key 過期時間設(shè)置,可以按需為不同 key 設(shè)置過期時間。

Redis過期鍵刪除策略

Redis key過期的方式有三種:

  • 被動刪除:當讀/寫一個已經(jīng)過期的key時,會觸發(fā)惰性刪除策略,直接刪除掉這個過期key
  • 主動刪除:由于惰性刪除策略無法保證冷數(shù)據(jù)被及時刪掉,所以Redis會定期主動淘汰一批已過期的key
  • 當前已用內(nèi)存超過maxmemory限定時,觸發(fā)主動清理策略

1、定時刪除

定時刪除是在設(shè)置key的過期時間的同時,會創(chuàng)建一個定時器(timer)。定時器在key的過期時間來臨時,立即執(zhí)行對key的刪除操作。

此種刪除策略可以保證過期key會盡可能快的被刪除,并釋放過期key所占用的內(nèi)存。

但是此種策略對CPU時間是最不友好的。在過期key比較多的情況下,刪除過期key這一行為可能會占用相當一部分CPU時間,在內(nèi)存不緊張但是CPU時間非常緊張的情況下,將CPU時間用在刪除和當前任務(wù)無關(guān)的過期key上,無疑會對服務(wù)器的響應(yīng)時間和吞吐量造成影響。

例如,正有大量的命令請求在等待服務(wù)器處理,并且服務(wù)器當前不缺少內(nèi)存的情況下,服務(wù)器應(yīng)當優(yōu)先將CPU時間用在處理客戶端的命令請求上面,而不是用在刪除過期key上面。

并且創(chuàng)建一個定時器(timer)需要用到Redis服務(wù)器中的時間事件,而當前時間事件是用無序鏈表實現(xiàn)的,查找一個事件的時間復(fù)雜度為O(N),并不能高效地處理大量時間事件。要讓服務(wù)器創(chuàng)建大量的定時器,從而實現(xiàn)定時刪除,在現(xiàn)階段來說并不現(xiàn)實。

優(yōu)點:

1.可以自動清理不需要的緩存數(shù)據(jù),減少內(nèi)存占用。

2.可以定時刷新部分緩存,保證數(shù)據(jù)實時性。

3.可以根據(jù)業(yè)務(wù)需求自定義不同的數(shù)據(jù)緩存周期。

4.操作簡單,只需要設(shè)置過期時間,不需要手動刪除。

缺點:

1.需要額外的內(nèi)存來存儲 key 的過期時間。

2.過期刪除是被動操作,無法按需主動刪除。

3.過期時間的精度只到秒級,無法更細粒度控制。

4.如果過期 key 數(shù)量很多,過期刪除時還是有一定性能開銷。

5.只依賴過期時間可能導(dǎo)致一段時間內(nèi)緩存量激增,需配合其它方式控制。

示例:

// 設(shè)置10秒過期
jedis.setex("data", 10, "cache"); 

2、定期刪除

定期刪除是指Redis會每隔一段時間,對部分key進行檢查和刪除。具體來說,Redis會每隔一段時間隨機抽取一部分key,檢查其是否過期,如果過期則刪除。

優(yōu)點:

1.減少每次訪問的時間復(fù)雜度。

2.減少刪除操作對CPU時間的影響。

缺點:

可能會有一些過期key沒有被及時刪除。

通過定期刪除策略,可以有效地減少因為過期key而帶來的內(nèi)存浪費。

示例:

// 定期掃描刪除
public void delKeys(){
  Set<String> keys = jedis.keys("cache:*");
  jedis.del(keys.toArray(new String[0])); 
}

// 調(diào)度執(zhí)行
scheduledExecutorService.scheduleAtFixedRate(this::delKeys, 0, 1, TimeUnit.HOURS);

3、惰性刪除

惰性刪除是指在訪問某個key時,Redis會先檢查該key是否過期,如果過期則立即刪除。這種策略的優(yōu)點是能夠及時釋放內(nèi)存空間,但缺點是會增加每次訪問的時間復(fù)雜度,因為需要進行過期檢查。

惰性刪除是定時刪除和定期刪除的折中處理方案。它放任key過期不管,但是每次獲取key時,都會檢查取得的key是否過期,如果過期,則刪除該key;若沒有過期,就返回該key的值。

優(yōu)點:

對CPU時間來說是最友好的,只在取出key時,才對key進行過期檢查,即只會在非做不可的情況下進行,并且刪除的目標僅限于當前處理的key,不會在刪除其他無關(guān)的過期key上花費任何CPU時間。

缺點:

對內(nèi)存是最不友好的。如果一個key已經(jīng)過期,而這個key又仍然保留在db中,那么只要這個過期key不被刪除,它所占用的內(nèi)存就不會釋放。例如,如果db中有非常多的過期key,而這些過期key又恰好沒有被訪問到的話,那它們也許永遠也不會被刪除,除非用戶手動執(zhí)行flushdb命令清空,這樣會導(dǎo)致大量的無用的臟數(shù)據(jù)占用大量的內(nèi)存。

示例:

jedis.set("key", "value");
jedis.unlink("key"); // 惰性標記刪除

總結(jié)

Redis的過期key刪除策略是惰性刪除、定期刪除和定時刪除的混合策略。惰性刪除能夠及時釋放內(nèi)存空間,但會增加每次訪問的時間復(fù)雜度;定期刪除能夠減少時間復(fù)雜度,但可能會有一些過期key沒有被及時刪除;定時刪除能夠精確控制過期時間,但需要額外的定時任務(wù)。通過這種混合策略,Redis能夠在保證內(nèi)存空間的同時,盡可能地減少對性能的影響。

以上就是Redis刪除過期key策略詳解的詳細內(nèi)容,更多關(guān)于Redis刪除過期key的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 分布式使用Redis實現(xiàn)數(shù)據(jù)庫對象自增主鍵ID

    分布式使用Redis實現(xiàn)數(shù)據(jù)庫對象自增主鍵ID

    本文介紹在分布式項目中使用Redis生成對象的自增主鍵ID,通過Redis的INCR等命令實現(xiàn)計數(shù)器功能,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • Redis生成全局唯一ID的實現(xiàn)方法

    Redis生成全局唯一ID的實現(xiàn)方法

    全局唯一ID生成器是一種在分布式系統(tǒng)下用來生成全局唯一ID的工具,本文主要介紹了Redis生成全局唯一ID的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2022-06-06
  • Docker快速部署Redis完整步驟流程(含持久化配置)

    Docker快速部署Redis完整步驟流程(含持久化配置)

    Redis集群是一種分布式數(shù)據(jù)庫解決方案,旨在提供高性能、高可用性、可擴展性的數(shù)據(jù)存儲服務(wù),這篇文章主要介紹了Docker快速部署Redis(含持久化配置)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • Govern Service 基于 Redis 的服務(wù)治理平臺安裝過程詳解

    Govern Service 基于 Redis 的服務(wù)治理平臺安裝過程詳解

    Govern Service 是一個輕量級、低成本的服務(wù)注冊、服務(wù)發(fā)現(xiàn)、 配置服務(wù) SDK,通過使用現(xiàn)有基礎(chǔ)設(shè)施中的 Redis 不用給運維部署帶來額外的成本與負擔,接下來通過本文給大家分享Govern Service 基于 Redis 的服務(wù)治理平臺的相關(guān)知識,感興趣的朋友一起看看吧
    2021-05-05
  • Redis數(shù)據(jù)庫原理深入刨析

    Redis數(shù)據(jù)庫原理深入刨析

    在之前的文章我們介紹過,Redis服務(wù)器在啟動之初,會初始化RedisServer的實例,在這個實例中存在很多重要的屬性結(jié)構(gòu),同理本篇博客中介紹的數(shù)據(jù)庫實現(xiàn)原理也會和其中的某些屬性相關(guān),我們繼續(xù)看一下吧
    2022-11-11
  • redis實現(xiàn)排行榜的簡單方法

    redis實現(xiàn)排行榜的簡單方法

    這篇文章主要給大家介紹了關(guān)于redis實現(xiàn)排行榜的簡單方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Redis Key的數(shù)量上限及優(yōu)化策略分享

    Redis Key的數(shù)量上限及優(yōu)化策略分享

    Redis 作為高性能的鍵值存儲數(shù)據(jù)庫,廣泛應(yīng)用于緩存、會話存儲、排行榜等場景,但在實際使用中,開發(fā)者常常會關(guān)心一個問題:Redis 的 Key 數(shù)量是否有上限?本文將從 Redis Key 的理論上限 出發(fā),深入探討 Redis Key 的管理策略,需要的朋友可以參考下
    2025-03-03
  • Redis分布式鎖如何自動續(xù)期的實現(xiàn)

    Redis分布式鎖如何自動續(xù)期的實現(xiàn)

    本文主要介紹了Redis分布式鎖如何自動續(xù)期的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • redis中scan命令的基本實現(xiàn)方法

    redis中scan命令的基本實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于redis中scan命令的基本實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Redis線程模型的原理分析

    Redis線程模型的原理分析

    Redis是一個高性能的數(shù)據(jù)存儲框架,在高并發(fā)的系統(tǒng)設(shè)計中,Redis也是一個比較關(guān)鍵的組件,是我們提升系統(tǒng)性能的一大利器,本文詳細的介紹了Redis線程模型,感興趣的可以了解一
    2021-11-11

最新評論

昌吉市| 桑日县| 新宁县| 玉山县| 肥乡县| 台中市| 即墨市| 津市市| 凌源市| 阜新市| 孟连| 城固县| 惠东县| 遂川县| 三原县| 江安县| 浪卡子县| 武义县| 沙雅县| 龙里县| 团风县| 额济纳旗| 绥宁县| 正镶白旗| 伽师县| 龙胜| 柘城县| 清远市| 宁城县| 志丹县| 瑞昌市| 广元市| 吐鲁番市| 永春县| 汤阴县| 雅安市| 长宁县| 衡阳县| 邛崃市| 澄迈县| 房产|