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

redis?key鍵過期刪除策略及淘汰機制探究

 更新時間:2023年11月16日 10:57:56   作者:bug生產(chǎn)者  
這篇文章主要為大家介紹了redis?key鍵過期刪除策略及淘汰機制探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

redis過期刪除

redis的鍵可以設(shè)置過期時間,但是并不是每個鍵一到過期時間就會立即刪除,redis不可能給每個設(shè)置過期時間的key上添加一個定時器來監(jiān)視是否過期,CPU根本承受不了如此多的定時線程

注意:我使用的版本是6.0.10,不同版本可能略有差別

刪除策略

存在的刪除策略:

  • 定時刪除 在設(shè)置鍵的同時創(chuàng)建定時器,過期時間到了就執(zhí)行對鍵的刪除,這種策略對內(nèi)存使用率有優(yōu)勢,但是占用CPU資源太多
  • 定期刪除 每隔特定時間對數(shù)據(jù)庫進行一次掃描,檢測并刪除其中過期的鍵值對
  • 惰性刪除 鍵值對過期暫時不進行刪除,當獲取鍵時先查看是否已經(jīng)過期,過期則進行刪除,這種策略可能會由于一些過期key一直沒有被訪問,浪費一定的內(nèi)存

redis采用的策略是定期刪除+惰性刪除

定期刪除是指每隔一段時間去檢查是否有過期的key,如果有則刪除

惰性刪除是指在獲取key的時候檢查一下這個key是否過期

定期刪除的配置是hz(默認是10,即每秒十次掃描)

首先客戶端在嘗試訪問某個key的時候,redis會檢查是否過期,如果過期則刪除,但是有些key是不會被訪問到的,redis的定期刪除則會進行掃描并刪除過期的key

  • 從過期字典里隨機抽取20個key
  • 刪除這20個key中已經(jīng)過期的key
  • 如果過期的比例超過25%,則重復步驟一

過期的key過多會導致循環(huán)抽取刪除,為防止過度循環(huán),增加了掃描時間的上限,默認不超過25ms

應(yīng)該避免同一時刻大量key同時過期

在主從結(jié)構(gòu)中,從服務(wù)器就算讀取到過期鍵也不會刪除,只有接收到主服務(wù)器發(fā)來的del命令之后才會刪除

淘汰機制

配置最大內(nèi)存的大小,如果超過該內(nèi)存大小,就會使用淘汰機制進行淘汰

maxmemory 100mb

也可以通過命令進行修改

127.0.0.1:6380> config set maxmemory 50mb
OK
127.0.0.1:6380> config get maxmemory
1) "maxmemory"
2) "52428800"

由于使用定期刪除+惰性刪除機制,但是也可能很多過期的沒有被刪除掉導致內(nèi)存不足的情況,所以redis存在淘汰機制

  • volatile-lru -> Evict using approximated LRU, only keys with an expire set 當內(nèi)存不足時,設(shè)置了過期時間的鍵,選取最近最少使用的鍵拋棄(Least Recently Used)
  • allkeys-lru -> Evict any key using approximated LRU 當內(nèi)存不足時,對于所有的鍵,選取最近最少使用的鍵拋棄(Least Recently Used)
  • volatile-lfu -> Evict using approximated LFU, only keys with an expire set 當內(nèi)存不足時,設(shè)置了過期時間的鍵,選取最少頻率使用的鍵拋棄(Least Frequently Used)
  • allkeys-lfu -> Evict any key using approximated LFU 當內(nèi)存不足時,對于所有的鍵,選取最少頻率使用的鍵拋棄(Least Frequently Used)
  • volatile-random -> Remove a random key having an expire set 當內(nèi)存不足時,對于設(shè)置過期時間的鍵,隨機選取鍵拋棄
  • allkeys-random -> Remove a random key, any key 當內(nèi)存不足時,對于所有的鍵,隨機選取鍵拋棄
  • volatile-ttl -> Remove the key with the nearest expire time (minor TTL) 當內(nèi)存不足時,拋棄最近要過期的鍵
  • noeviction -> Don't evict anything, just return an error on write operations 默認策略,不淘汰,如果內(nèi)存已滿,寫操作返回錯誤

在使用volatile-lfu、volatile-random、volatile-ttl時,如果沒有key可以淘汰,則與noeviction一樣在寫操作時返回錯誤

獲取當前的內(nèi)存策略

config get maxmemory-policy

可以在配置文件修改

maxmemory-policy noeviction

也可以使用命令設(shè)置

config set maxmemory-policy noeviction

在進行LRU/LFU/TTL淘汰策略時,并不是那么準確,可以通過采樣率來進行設(shè)置其準確度,默認是5,即隨機選出5個key,然后淘汰掉里面最近最少使用的key。

當設(shè)置為10的時候就非常接近真正的LRU算法了,但是會消耗更多的CPU,5已經(jīng)是足夠好的結(jié)果了

maxmemory-samples 5

以上就是redis key鍵過期刪除策略及淘汰機制探究的詳細內(nèi)容,更多關(guān)于redis key鍵過期刪除的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • redis 查看所有的key方式

    redis 查看所有的key方式

    這篇文章主要介紹了redis 查看所有的key方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • CentOS 7下安裝 redis 3.0.6并配置集群的過程詳解

    CentOS 7下安裝 redis 3.0.6并配置集群的過程詳解

    這篇文章主要給大家介紹了CentOS 7下安裝 redis 3.0.6并配置集群的過程,文中通過示例代碼和詳細的步驟介紹的很相信,對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-01-01
  • Redis大key和多key拆分的解決方案

    Redis大key和多key拆分的解決方案

    大key會導致內(nèi)存使用過高,多key可能導致查詢效率低下,本文主要介紹了Redis大key和多key拆分的解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 壓縮列表犧牲速度來節(jié)省內(nèi)存,Redis是膨脹了嗎

    壓縮列表犧牲速度來節(jié)省內(nèi)存,Redis是膨脹了嗎

    這篇文章主要給大家解釋了Redis 當中的 ziplist(壓縮列表)犧牲速度來節(jié)省內(nèi)存的原因,希望大家能夠喜歡
    2021-02-02
  • 比較幾種Redis集群方案

    比較幾種Redis集群方案

    Redis高可用集群是一個由多個主從節(jié)點群組成的分布式服務(wù)器群,它具有復制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成節(jié)點移除和故障轉(zhuǎn)移的功能,只要將每個節(jié)點設(shè)置成集群模式,這種集群模式?jīng)]有中心節(jié)點,可水平擴展,官方稱可以線性擴展到上萬個節(jié)點
    2021-06-06
  • 淺談Redis中LFU算法源碼解析

    淺談Redis中LFU算法源碼解析

    Redis的LFU淘汰算法主要用于?maxmemory-policy?設(shè)置為allkeys-lfu或volatile-lfu時,以最少使用頻率的鍵進行淘汰,本文主要介紹了淺談Redis中LFU算法源碼解析,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • 詳解Redis SCAN命令實現(xiàn)有限保證的原理

    詳解Redis SCAN命令實現(xiàn)有限保證的原理

    這篇文章主要介紹了Redis SCAN命令實現(xiàn)有限保證的原理,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • redis簡單介紹及安裝使用小結(jié)

    redis簡單介紹及安裝使用小結(jié)

    本文主要是對于redis初步學習的小結(jié)內(nèi)容,包括了redis介紹,redis安裝以及最簡單的使用,希望大家能夠喜歡
    2018-11-11
  • redis單線程快的原因和原理

    redis單線程快的原因和原理

    在本篇文章中小編給大家整理了關(guān)于redis單線程為什么快的原因和具體實例,有興趣的朋友們可以參考下。
    2019-06-06
  • Redis哨兵監(jiān)控的使用

    Redis哨兵監(jiān)控的使用

    在Redis集群模式中,哨兵模式是一種常用的方案,本文主要介紹了Redis哨兵監(jiān)控的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11

最新評論