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

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

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

redis過期刪除

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

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

刪除策略

存在的刪除策略:

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

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

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

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

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

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

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

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

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

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

淘汰機(jī)制

配置最大內(nèi)存的大小,如果超過該內(nèi)存大小,就會(huì)使用淘汰機(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í),設(shè)置了過期時(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è)置了過期時(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è)置過期時(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í),拋棄最近要過期的鍵
  • 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)確,可以通過采樣率來進(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鍵過期刪除策略及淘汰機(jī)制探究的詳細(xì)內(nèi)容,更多關(guān)于redis key鍵過期刪除的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Redis的雙寫問題解決

    Redis的雙寫問題解決

    本文主要介紹了Redis的雙寫問題解決,這種問題在使用 Redis 作為緩存層時(shí)尤為常見,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • Redis妙用之存儲(chǔ)用戶token問題

    Redis妙用之存儲(chǔ)用戶token問題

    這篇文章主要介紹了Redis妙用之存儲(chǔ)用戶token問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Redis事務(wù)處理的使用操作方法

    Redis事務(wù)處理的使用操作方法

    Redis保證一個(gè)事務(wù)中的所有命令要么都執(zhí)行,要么都不執(zhí)行(原子性),如果客戶端發(fā)送了EXEC命令,所有的命令就都會(huì)被執(zhí)行,即使此后客戶端斷線也沒關(guān)系,因?yàn)镽edis中已經(jīng)記錄了所有要執(zhí)行的命令,下面通過本文給大家介紹Redis事務(wù)處理的使用操作,感興趣的朋友一起看看吧
    2021-10-10
  • redis做websocket分布式消息推送服務(wù)的實(shí)現(xiàn)

    redis做websocket分布式消息推送服務(wù)的實(shí)現(xiàn)

    本文介紹了使用Redis作為消息隊(duì)列實(shí)現(xiàn)WebSocket分布式消息推送服務(wù)的方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    深入解析RedisJSON之如何在Redis中直接處理JSON數(shù)據(jù)

    JSON已經(jīng)成為現(xiàn)代應(yīng)用程序之間數(shù)據(jù)傳輸?shù)耐ㄓ酶袷?然而,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫在處理JSON數(shù)據(jù)時(shí)可能會(huì)遇到性能瓶頸,本文將詳細(xì)介紹RedisJSON的工作原理、關(guān)鍵操作、性能優(yōu)勢(shì)以及使用場(chǎng)景,感興趣的朋友一起看看吧
    2024-05-05
  • redis如何查看鎖是否存在

    redis如何查看鎖是否存在

    文章介紹了兩種方法來檢查Redis鎖的狀態(tài):使用GET命令查看鎖的值和使用EXISTS命令檢查鎖的存在性,這兩種方法都是通過連接到Redis服務(wù)器并執(zhí)行相應(yīng)的命令來實(shí)現(xiàn)的,GET命令用于獲取指定鍵的值,而EXISTS命令用于檢查指定鍵是否存在
    2025-01-01
  • SpringBoot整合Mybatis-plus和Redis實(shí)現(xiàn)投票功能

    SpringBoot整合Mybatis-plus和Redis實(shí)現(xiàn)投票功能

    投票功能是一個(gè)非常常見的Web應(yīng)用場(chǎng)景,這篇文章將為大家介紹一下如何將Redis和Mybatis-plus整合到SpringBoot中,實(shí)現(xiàn)投票功能,感興趣的可以了解一下
    2023-05-05
  • Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決

    Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決

    這篇文章主要介紹了Redis和數(shù)據(jù)庫 數(shù)據(jù)同步問題的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Windows環(huán)境下打開Redis閃退的解決方案

    Windows環(huán)境下打開Redis閃退的解決方案

    每次使用完Redis后,我們習(xí)慣性的動(dòng)作是直接叉掉doc頁面,這樣導(dǎo)致的結(jié)果是Redis在后臺(tái)繼續(xù)運(yùn)行,沒有關(guān)閉,所以當(dāng)再次打開的時(shí)候直接閃退,文中有詳細(xì)的解決方案,需要的朋友可以參考下
    2024-03-03
  • 關(guān)于Redis未授權(quán)訪問的問題

    關(guān)于Redis未授權(quán)訪問的問題

    這篇文章主要介紹了Redis未授權(quán)訪問的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評(píng)論