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

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

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

redis過期刪除

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

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

刪除策略

存在的刪除策略:

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

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

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

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

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

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

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

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

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

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

淘汰機(jī)制

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

maxmemory 100mb

也可以通過命令進(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ī)制,但是也可能很多過期的沒有被刪除掉導(dǎo)致內(nèi)存不足的情況,所以redis存在淘汰機(jī)制

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

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

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

config get maxmemory-policy

可以在配置文件修改

maxmemory-policy noeviction

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

config set maxmemory-policy noeviction

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

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

maxmemory-samples 5

以上就是redis key鍵過期刪除策略及淘汰機(jī)制探究的詳細(xì)內(nèi)容,更多關(guān)于redis key鍵過期刪除的資料請關(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)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • redis中key使用冒號分隔的原理小結(jié)

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

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

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

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

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

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

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

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

    Redis緩存和Redis分布式鎖使用及說明

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

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

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

    如何用redis?setNX命令來加鎖

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

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

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

最新評論

双柏县| 平顺县| 靖州| 玛曲县| 宁晋县| 慈溪市| 平湖市| 新晃| 江安县| 五华县| 清丰县| 江都市| 迭部县| 左云县| 绥化市| 神农架林区| 平邑县| 郯城县| 犍为县| 舒城县| 钟山县| 龙井市| 榆社县| 东乡县| 荔浦县| 临海市| 施甸县| 平定县| 海城市| 临潭县| 浦县| 武夷山市| 三亚市| 蒙城县| 赤城县| 丹寨县| 于都县| 图木舒克市| 华蓥市| 松江区| 红河县|