redis的淘汰機制


我們都知道redis緩存時可以設置過期時間,那么redis是如何識別這個key已經過期並將該key清掉呢?

當redis的內存滿了之后,為什么還可以繼續寫緩存呢?而某些key又會被清掉,是什么原因呢?

以上問題就涉及到了redis的過期策略和淘汰機制,我們可以來了解一下。

redis為什么要有淘汰機制?

  redis淘汰機制的存在是為了更好的使用內存,用一定的緩存丟失來換取內存的使用效率。

redis的過期策略

  redis有兩種過期策略,定期刪除和惰性刪除

    • 定期刪除:redis每個100ms隨機抽取一些設置了過期時間的key,檢查其是否過期,如果過期就刪除。
    • 惰性刪除:在獲取某個key的時候,redis檢查一下,如果該key設置了過期時間則判斷該過期時間是否已經過期,如果過期了就直接刪掉並不返回任何東西。

redis的內存淘汰機制

  當redis內存快耗盡時,redis會啟動內存淘汰機制,將部分key清掉以騰出內存。

  redis提供6中數據淘汰策略,可在redis.conf中配置:maxmemory-policy noeviction

  • noeviction:禁止驅逐數據。默認配置都是這個。當內存使用達到閥值的時候,所有引起申請內存的命令都會報錯。
  • volatile-lru:從設置了過期時間的數據集中挑選最近最少使用的數據淘汰。
  • volatile-ttl:從已設置了過期時間的數據集中挑選即將要過期的數據淘汰。
  • volatile-random:從已設置了過期時間的數據集中任意選擇數據淘汰。
  • allkeys-lru:從數據集中挑選最近最少使用的數據淘汰。
  • allkeys-random:從數據集中任意選擇數據淘汰。

  當Redis確定好要驅逐某個鍵值對后,會刪除這個數據,並將這個數據變更消息同步到本地和從機。

以上參考來自https://www.cnblogs.com/wjh123/p/11254858.htmlhttp://mini.eastday.com/mobile/180918003550027.html#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM