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

深入理解redis刪除策略和淘汰策略

 更新時間:2024年08月31日 10:09:03   作者:柚子餅干  
每隔一段時間就掃描一定數(shù)據(jù)的設(shè)置了過期時間的key,并清除其中已過期的keys,本文主要介紹了深入理解redis刪除策略和淘汰策略,感興趣的可以了解一下

1、redis的刪除策略

Redis 是一種內(nèi)存級數(shù)據(jù)庫,數(shù)據(jù)都存在內(nèi)存中,但是針對于已經(jīng)過期的數(shù)據(jù),reids 不 會立刻刪除只是會存儲在 expires 中,當(dāng)執(zhí)行刪除策略的時候,才會從 expires 中尋找對應(yīng)的數(shù)據(jù)存儲的地址,在存儲空間中找到對應(yīng)的數(shù)據(jù)進行刪除。數(shù)據(jù)刪除其實就是內(nèi)存和 CPU 占用之間尋找平衡,CPU 才能去處理事情,針對過期數(shù)據(jù),要進行刪除的時候,一般有三種策略 

2、三種刪除策略

 (1)、定時刪除

顧名思義,給Key設(shè)置一個時間,時間到了,定時器任務(wù)立即執(zhí)行刪除,相當(dāng)于消 耗 CPU 來減少內(nèi)存使用,拿時間換空間。

優(yōu)點:節(jié)約內(nèi)存,到時就刪除,快速釋放掉不必要的內(nèi)存占用 缺點:CPU 壓力大,無論 CPU 此時負(fù)載量多高,都會去占用 CPU 進行 key 的刪除 操作,會影響 Redis 服務(wù)器響應(yīng)時間和吞吐量,是一種比較低效的方式 結(jié)論:用 CPU 性能換取內(nèi)存空間,時間換空間

(2)、惰性刪除 

就是說,數(shù)據(jù)到達過期時間的時候,先不做處理,等到下次訪問數(shù)據(jù)的時候,進行訪問, 如未過期,返回數(shù)據(jù),如過期,則刪除。這就相當(dāng)于節(jié)約了 CPU 但占用了內(nèi)存,拿空間換 時間。

優(yōu)點:不占用 CPU 節(jié)約 CPU 性能,只在獲取訪問 key 的時候才判斷是否過期,過期 則刪除,只會刪除當(dāng)前獲取的這一個 key,其他的 key 還是保持原樣

缺點:內(nèi)存占用大,如果一直沒有獲取它,那么數(shù)據(jù)就會長期占用內(nèi)存空間,當(dāng)有大量 的 key 沒有被使用到,也造成了大量內(nèi)存浪費,對內(nèi)存數(shù)據(jù)庫來說,也不太友好 結(jié)論:空間換時間

(3)、定期刪除 

前面說的兩種方案 1.時間換空間,2.空間換時間都是兩個極端方法,為避免前面方案帶 來的問題,Redis 引入了定期刪除策略(是他們的一個比較折中的方案)周期性輪詢 Redis 庫中的時效性數(shù)據(jù),采取隨機抽取的策略,利用過期數(shù)據(jù)占比的方式控制刪除頻度。在 Redis 服務(wù)器初始化時,讀取 server.hz 的值,默認(rèn)值為 10。定時輪詢服務(wù)器,每秒鐘執(zhí)行 server.hz 次 serverCron() 函數(shù)。databaseCron() 在后臺輪詢處理 16 個 redis 數(shù)據(jù)庫的操作,如這里的過期key 的處理activeExpireCycle(),對每個數(shù)據(jù)庫的 expire 空間進行檢測,每次執(zhí)行250ms/server.hz 隨機選取一批 expire 空間的 key(redis 有 16 個數(shù)據(jù)庫,從 0 號數(shù)據(jù)庫開始—15號數(shù)據(jù)庫) 刪除這批 key 中已過期的。如果這批 key 中已過期的占比超過 25%,那么再重復(fù)執(zhí)行步驟一。(循環(huán)到小于 25%結(jié)束當(dāng)前數(shù)據(jù)庫的刪除)如果這批 key 中已過期的占比 ≤ 25%,檢測下一個數(shù)據(jù)庫的 expire 空間(current_db++) 用 info 命令查看相關(guān)配置參數(shù)

 每秒鐘執(zhí)行 hz 次 serverCron(),對服務(wù)器進行定時輪詢

3、三種策略對比 

1:定時刪除: 節(jié)約內(nèi)存,無占用, 不分時段占用 CPU 資源, 頻度高,拿時間換空間 

2:惰性刪除: 內(nèi)存占用嚴(yán)重 延時執(zhí)行, CPU 利用率高拿空間換時間

3:定期刪除: 內(nèi)存定期隨機清理 每秒花費固定的 CPU 資源維護內(nèi)存 隨機抽查,重點抽查

4、淘汰/逐出策略 

在 Redis 中經(jīng)常會進行數(shù)據(jù)的增刪查改操作,那么如果在添加數(shù)據(jù)的時候遇到了內(nèi)存不足,該怎么辦?在前面用的刪除策略可以避免出現(xiàn)這種情況嗎? 實際上,在前面所說的刪除策略,它針對的是 expire 命令進行的操作,也就是說那些具有時效性的數(shù)據(jù)(已經(jīng)過期,并且還在占用內(nèi)存的數(shù)據(jù)) 針對那些并沒有過期,或者是內(nèi)存中的數(shù)據(jù)沒有一個帶有有效期,全是永久性數(shù)據(jù),這時候刪除策略就不起作用了,所以這個時候內(nèi)存滿了我們再去插入數(shù)據(jù)到內(nèi)存是怎么做?那就需要用到淘汰策略了。

redis 執(zhí)行命令之前,都會用 freeMemoryIfNeeded()方法,檢測這次內(nèi)存是否充足,如果不滿足加入新數(shù)據(jù),則會執(zhí)行淘汰策略(淘汰未過期的數(shù)據(jù))

(1)、淘汰策略分類

檢測帶有時效性的數(shù)據(jù)進行淘汰(一般是有定時,會過期的數(shù)據(jù)的)

volatile-lru:挑選最近最少使用的數(shù)據(jù)淘汰

volatile-lfu:挑選最近使用次數(shù)最少的數(shù)據(jù)淘汰

volatile-ttl:挑選將要過期的數(shù)據(jù)淘汰

volatile-random:任意選擇數(shù)據(jù)淘汰

檢測全庫的數(shù)據(jù)進行淘汰

allkeys-lru:挑選最近最少使用的數(shù)據(jù)淘汰

allkeLyRs-lfu:挑選最近使用次數(shù)最少的數(shù)據(jù)淘汰

allkeys-random:任意選擇數(shù)據(jù)淘汰,相當(dāng)于隨機

到此這篇關(guān)于深入理解redis刪除策略和淘汰策略的文章就介紹到這了,更多相關(guān)redis刪除策略和淘汰策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • k8s部署redis集群實現(xiàn)過程實例詳解

    k8s部署redis集群實現(xiàn)過程實例詳解

    這篇文章主要為大家介紹了k8s部署redis集群實現(xiàn)過程實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Python交互Redis的實現(xiàn)

    Python交互Redis的實現(xiàn)

    本文主要介紹了Python交互Redis的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis延遲隊列的實現(xiàn)示例

    Redis延遲隊列的實現(xiàn)示例

    Redis 延遲隊列是一種使用 Redis 實現(xiàn)的消息隊列,本文主要介紹了Redis延遲隊列的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 排查Redis大key的方法總結(jié)

    排查Redis大key的方法總結(jié)

    這篇文章主要介紹了排查Redis大key的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Redis解決Session共享問題的方法詳解

    Redis解決Session共享問題的方法詳解

    這篇文章主要為大家詳細(xì)介紹了分布式系統(tǒng)Redis解決Session共享問題的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • Redis?SCAN命令詳解

    Redis?SCAN命令詳解

    SCAN 命令是一個基于游標(biāo)的迭代器,每次被調(diào)用之后, 都會向用戶返回一個新的游標(biāo), 用戶在下次迭代時需要使用這個新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來延續(xù)之前的迭代過程,這篇文章給大家介紹了Redis?SCAN命令的相關(guān)知識,感興趣的朋友一起看看吧
    2022-07-07
  • Redis 分片集群的實現(xiàn)

    Redis 分片集群的實現(xiàn)

    本文主要介紹了Redis 分片集群的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis 對比 Memcached 并在 CentOS 下進行安裝配置詳解

    Redis 對比 Memcached 并在 CentOS 下進行安裝配置詳解

    Redis 是一個開源、支持網(wǎng)絡(luò)、基于內(nèi)存、鍵值對的 Key-Value 數(shù)據(jù)庫,本篇文章主要介紹了Redis 對比 Memcached 并在 CentOS 下進行安裝配置詳解,有興趣的可以了解一下。
    2016-11-11
  • Redis 單節(jié)點部署的實現(xiàn)

    Redis 單節(jié)點部署的實現(xiàn)

    本文主要介紹了Redis 單節(jié)點部署的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • redis過期監(jiān)聽機制方式

    redis過期監(jiān)聽機制方式

    這篇文章主要介紹了redis過期監(jiān)聽機制方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論