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

redis過期key的刪除策略介紹

 更新時間:2025年04月23日 14:58:49   作者:自由de單車  
這篇文章主要介紹了redis過期key的刪除策略,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在使用redis的過程中,不免會產(chǎn)生過期的key,而這些key過期后并不會實時地馬上被刪除,當這些key數(shù)量累積越來越多,就會占用很多內(nèi)存,因此在redis底層同時使用了三種策略來刪除這些key。

第一種策略:被動刪除

當讀/寫一個key時,redis首先會檢查這個key是否存在,如果存在且已過期,則直接刪除這個key并返回nil給客戶端。

第二種策略:定期刪除

redis中有一系列的定期任務(wù)(serverCron),這些任務(wù)每隔一段時間就會運行一次,其中就包含清理過期key的任務(wù),運行頻率由配置文件中的hz參數(shù)來控制,取值范圍1~500,默認是10,代表每秒運行10次。

清理過程如下:

  1. 遍歷所有的db
  2. 從db中設(shè)置了過期時間的key的集合中隨機檢查20個key
  3. 刪除檢查中發(fā)現(xiàn)的所有過期key
  4. 如果檢查結(jié)果中25%以上的key已過期,則繼續(xù)重復(fù)執(zhí)行步驟2-3,否則繼續(xù)遍歷下一個db

調(diào)大hz將會提高redis定期任務(wù)的執(zhí)行頻率,如果你的redis中包含很多過期key的話,可以考慮將這個值調(diào)大,但要注意同時也會增加CPU的壓力,redis作者建議這個值不要超過100。

第三種策略:強制刪除

如果redis使用的內(nèi)存已經(jīng)達到maxmemory配置的值時,會觸發(fā)強制清理策略,清理策略由配置文件的maxmemory-policy參數(shù)來控制

有以下這些清理策略:

  • volatile-lru:使用LRU算法對設(shè)置了過期時間的key進行清理(默認值)
  • allkeys-lru:使用LRU算法對所有key進行清理
  • volatile-lfu:使用LFU算法對設(shè)置了過期時間的key進行清理(redis 4.0版本開始支持)
  • allkeys-lfu:使用LFU算法對所有key進行清理(redis 4.0版本開始支持)
  • volatile-random:對所有設(shè)置了過期時間的key進行隨機清理
  • allkeys-random:從所有key進行隨機清理
  • volatile-ttl:清理生存時間最小的一部分key
  • noeviction:不做任何清理,拒絕執(zhí)行所有的寫操作(如果需要保證數(shù)據(jù)的完整性,可以選擇這個)

為了節(jié)省內(nèi)存和性能上的考慮,上述的清理策略都不需要遍歷所有數(shù)據(jù),而是采用隨機采樣的方法,每次隨機取出特定數(shù)量(由maxmemory-samples配置項控制,默認是5個)的key,然后在這些key中執(zhí)行LRU算法、RANDOM算法、或者是找出TTL時間最小的一個key,然后進行刪除。

注:這個清理過程是阻塞的,直到清理出足夠的內(nèi)存空間才會停止。

關(guān)于big key的清理

在刪除元素數(shù)量很多的集合(set/hash/list/sortedSet)時,無論是使用DEL命令刪除還是redis為了釋放內(nèi)存空間而進行的刪除,在刪除這些big key的時候,會導(dǎo)致redis主線程阻塞。為了解決這個問題,在redis 4.0版本中,提供了lazy free(懶惰刪除)的特性。

使用lazy free刪除big key時,和一個O(1)指令的耗時一樣,亞毫秒級返回,然后把真正刪除key的耗時動作交由bio后臺子線程執(zhí)行。

UNLINK命令

UNLINK命令是與DEL一樣刪除key功能的lazy free實現(xiàn)。

唯一不同的是,UNLINK在刪除集合類型的鍵時,如果集合鍵的元素個數(shù)大于64個,會把真正的內(nèi)存釋放操作,交給單獨的后臺線程來操作,使用示例:

127.0.0.1:6379> UNLINK mylist
(integer) 1

FLUSHALL/FLUSHDB命令

FLUSHALL/FLUSHDB命令也有l(wèi)azy free的實現(xiàn),在命令后加上ASYNC關(guān)鍵字就可以,使用示例:

127.0.0.1:6379> FLUSHALL ASYNC

lazy free相關(guān)配置項

與lazy free相關(guān)的配置項有以下這些,默認值都是no,即關(guān)閉。

lazyfree-lazy-eviction

針對redis內(nèi)存使用達到maxmemory,并設(shè)置有淘汰策略時,在淘汰鍵時是否采用lazy free機制。

注:如果此場景開啟lazy free,可能會使淘汰鍵的內(nèi)存釋放不及時,導(dǎo)致redis不能迅速將內(nèi)存使用下降到maxmemory以下。

lazyfree-lazy-expire

針對設(shè)置有過期時間的key,達到過期后,被redis清理刪除時是否采用lazy free機制,此場景建議開啟。

lazyfree-lazy-server-del

針對有些命令在處理已存在的鍵時,會帶有一個隱式的DEL鍵的操作。如RENAME命令,當目標鍵已存在,redis會先刪除目標鍵,如果這些目標鍵是一個big key,那就會出現(xiàn)阻塞的性能問題。 此參數(shù)設(shè)置就是解決這類問題,建議開啟。

slave-lazy-flush

針對slave進行全量數(shù)據(jù)同步,slave在加載master的RDB文件前,會運行FLUSHALL來清理自己的數(shù)據(jù)場景。

參數(shù)設(shè)置決定是否采用lazy free flush機制。如果內(nèi)存變動不大,建議可開啟??蓽p少全量同步耗時,從而減少主庫因輸出緩沖區(qū)爆漲引起的內(nèi)存使用增長。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • redis緩存神器之@Cacheable注解詳解

    redis緩存神器之@Cacheable注解詳解

    文章介紹了如何在SpringBoot中使用Redis和@Cacheable注解進行緩存分頁數(shù)據(jù),以及在數(shù)據(jù)更新時如何更新緩存,通過使用@EnableCaching、@Cacheable、@CachePut和@CacheEvict注解,可以簡化緩存操作并提高系統(tǒng)性能
    2025-11-11
  • Redis+Caffeine如何構(gòu)建高性能二級緩存

    Redis+Caffeine如何構(gòu)建高性能二級緩存

    這篇文章主要介紹了Redis+Caffeine如何構(gòu)建高性能二級緩存問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • redis實現(xiàn)分布式全局唯一id的示例代碼

    redis實現(xiàn)分布式全局唯一id的示例代碼

    在某些場景中,我們需要生成全局的唯一ID,本文主要介紹了redis實現(xiàn)分布式全局唯一id的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • 如何向redis中寫入大量的數(shù)據(jù)

    如何向redis中寫入大量的數(shù)據(jù)

    文章介紹了通過Python腳本生成Redis命令并輸出至文件,再用Shell腳本批量執(zhí)行的流程,強調(diào)Pipeline技術(shù)可提升批量寫入效率,并說明如何驗證數(shù)據(jù)插入成功
    2025-08-08
  • Redis實現(xiàn)編碼生成規(guī)則方式

    Redis實現(xiàn)編碼生成規(guī)則方式

    在自動生成編碼時應(yīng)采用“MD+年月日+4位序列號”的規(guī)則,如“MD202310130001”,為避免使用隨機序列號導(dǎo)致的重復(fù)編碼,建議使用從0開始的自增序列號,此外,使用Redis的incrBy功能實現(xiàn)序列號自增,可以有效提高效率和降低實現(xiàn)難度
    2023-01-01
  • 深入解析Redisson分布式鎖看門狗機制

    深入解析Redisson分布式鎖看門狗機制

    本文主要介紹了深入解析Redisson分布式鎖看門狗機制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2025-06-06
  • Redis搭建哨兵集群實踐

    Redis搭建哨兵集群實踐

    本文介紹了從零搭建一個1主+2從+3哨兵的高可用Redis架構(gòu),并驗證故障轉(zhuǎn)移效果,文中詳細描述了環(huán)境準備、搭建Redis主從復(fù)制、配置哨兵集群、驗證哨兵集群狀態(tài)以及模擬故障轉(zhuǎn)移的步驟,最后,還提供了在生產(chǎn)環(huán)境中的最佳實踐和常見問題排查建議
    2026-04-04
  • 淺談Redis 緩存的三大問題及其解決方案

    淺談Redis 緩存的三大問題及其解決方案

    Redis 經(jīng)常用于系統(tǒng)中的緩存,這樣可以解決目前 IO 設(shè)備無法滿足互聯(lián)網(wǎng)應(yīng)用海量的讀寫請求的問題。本文主要介紹了淺談Redis 緩存的三大問題及其解決方案,感興趣的可以了解一下
    2021-07-07
  • Windows下搭建Redis哨兵集群模式的方法步驟

    Windows下搭建Redis哨兵集群模式的方法步驟

    哨兵模式,是基于主從復(fù)制模式,主從復(fù)制的優(yōu)點全都擁有,并且主從可以實現(xiàn)自動切換,故障轉(zhuǎn)移等功能,本文主要介紹了Windows下搭建Redis哨兵集群模式的方法步驟,文中通過圖文介紹的非常詳細,感興趣的小伙伴們可以參考一下,需要的朋友可以參考下
    2023-09-09
  • Redis分布式鎖的幾種實現(xiàn)方法

    Redis分布式鎖的幾種實現(xiàn)方法

    本文主要介紹了Redis分布式鎖的幾種實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2025-04-04

最新評論

天门市| 广安市| 巴里| 沙洋县| 土默特左旗| 通州区| 通海县| 盐边县| 聊城市| 舒兰市| 财经| 罗江县| 庆元县| 正定县| 炎陵县| 平原县| 普兰县| 新沂市| 即墨市| 休宁县| 名山县| 五峰| 龙口市| 延寿县| 南部县| 宁陕县| 古浪县| 偏关县| 鄂托克旗| 得荣县| 威海市| 西平县| 龙岩市| 平塘县| 漳州市| 浮山县| 宁化县| 罗山县| 左云县| 高青县| 海丰县|