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

redis?key鍵過(guò)期刪除策略及淘汰機(jī)制探究

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

redis過(guò)期刪除

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

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

刪除策略

存在的刪除策略:

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

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

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

惰性刪除是指在獲取key的時(shí)候檢查一下這個(gè)key是否過(guò)期

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

首先客戶端在嘗試訪問(wèn)某個(gè)key的時(shí)候,redis會(huì)檢查是否過(guò)期,如果過(guò)期則刪除,但是有些key是不會(huì)被訪問(wèn)到的,redis的定期刪除則會(huì)進(jìn)行掃描并刪除過(guò)期的key

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

過(guò)期的key過(guò)多會(huì)導(dǎo)致循環(huán)抽取刪除,為防止過(guò)度循環(huán),增加了掃描時(shí)間的上限,默認(rèn)不超過(guò)25ms

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

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

淘汰機(jī)制

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

maxmemory 100mb

也可以通過(guò)命令進(jìn)行修改

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

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

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

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

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

config get maxmemory-policy

可以在配置文件修改

maxmemory-policy noeviction

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

config set maxmemory-policy noeviction

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

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

maxmemory-samples 5

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

相關(guān)文章

  • Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用

    本文主要介紹了Redis之SDS數(shù)據(jù)結(jié)構(gòu)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • redis執(zhí)行redis命令的方法教程

    redis執(zhí)行redis命令的方法教程

    這篇文章主要給大家介紹了在redis中執(zhí)行redis命令的方法教程,文中詳細(xì)介紹了關(guān)于Redis 命令及在遠(yuǎn)程服務(wù)上執(zhí)行命令的方法,介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • redis中key使用冒號(hào)分隔的原理小結(jié)

    redis中key使用冒號(hào)分隔的原理小結(jié)

    Redis是一種高性能的鍵值對(duì)非關(guān)系型數(shù)據(jù)庫(kù),通過(guò)redis不同類型命令可以為其中的鍵指定不同的數(shù)據(jù)類型,其中每個(gè)鍵的命名規(guī)范通常使用冒號(hào)符號(hào)分隔字符串,本文主要介紹了redis中key使用冒號(hào)分隔的原理小結(jié),感興趣的可以了解一下
    2024-01-01
  • Redis緩存工具封裝實(shí)現(xiàn)

    Redis緩存工具封裝實(shí)現(xiàn)

    本文主要介紹了Redis緩存工具封裝實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis面試必備之緩存設(shè)計(jì)規(guī)范與性能優(yōu)化詳解

    Redis面試必備之緩存設(shè)計(jì)規(guī)范與性能優(yōu)化詳解

    你是否在使用Redis時(shí),不清楚Redis應(yīng)該遵循的設(shè)計(jì)規(guī)范而苦惱,你是否在Redis出現(xiàn)性能問(wèn)題時(shí),不知道該如何優(yōu)化而發(fā)愁,快跟隨小編一起學(xué)習(xí)起來(lái)吧
    2024-03-03
  • Redis事務(wù)為什么不支持回滾

    Redis事務(wù)為什么不支持回滾

    事務(wù)是關(guān)系型數(shù)據(jù)庫(kù)的特征之一,那么作為 Nosql 的代表 Redis 中有事務(wù)嗎?如果有,那么 Redis 當(dāng)中的事務(wù)又是否具備關(guān)系型數(shù)據(jù)庫(kù)的 ACID 四大特性,本文就來(lái)詳細(xì)介紹一下
    2021-08-08
  • Redis緩存和Redis分布式鎖使用及說(shuō)明

    Redis緩存和Redis分布式鎖使用及說(shuō)明

    這段描述融合了Redis緩存和Redis分布式鎖兩個(gè)核心關(guān)鍵詞,詳細(xì)介紹了它們?cè)谙到y(tǒng)中的應(yīng)用場(chǎng)景、核心邏輯及典型場(chǎng)景,特別強(qiáng)調(diào)了兩者在數(shù)據(jù)一致性和生命周期上的區(qū)別,適合需要優(yōu)化系統(tǒng)性能和解決分布式系統(tǒng)布沖突的讀者
    2026-05-05
  • 高并發(fā)場(chǎng)景分析之redis+lua防重校驗(yàn)

    高并發(fā)場(chǎng)景分析之redis+lua防重校驗(yàn)

    這篇文章主要介紹了高并發(fā)場(chǎng)景分析之redis+lua防重校驗(yàn),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 如何用redis?setNX命令來(lái)加鎖

    如何用redis?setNX命令來(lái)加鎖

    這篇文章主要介紹了如何用redis?setNX命令來(lái)加鎖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法

    將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法

    這篇文章主要介紹了將MongoDB作為Redis式的內(nèi)存數(shù)據(jù)庫(kù)的使用方法,原理其實(shí)只是將內(nèi)存虛擬作為磁盤,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

资阳市| 高要市| 和田市| 玛纳斯县| 乌拉特后旗| 肃宁县| 米易县| 南丹县| 延津县| 峡江县| 化隆| 河源市| 仙游县| 称多县| 宁都县| 正宁县| 汉川市| 佛坪县| 恩平市| 福海县| 绍兴县| 子洲县| 梨树县| 嵊泗县| 沂水县| 安丘市| 油尖旺区| 平和县| 普陀区| 枞阳县| 南皮县| 泾川县| 永修县| 崇明县| 潼南县| 宁都县| 水城县| 鲁山县| 通化县| 周口市| 肃宁县|