日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis系列教程(九):Redis的内存回收原理,及内存过期淘汰策略详解

發布時間:2024/7/5 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis系列教程(九):Redis的内存回收原理,及内存过期淘汰策略详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.



Redis內存回收機制

Redis的內存回收主要圍繞以下兩個方面:

1.Redis過期策略:刪除過期時間的key值

2.Redis淘汰策略:內存使用到達maxmemory上限時觸發內存淘汰數據

Redis的過期策略和內存淘汰策略不是一件事,實際研發中不要弄混淆了,下面會完整的介紹兩者。

Redis過期策略

過期策略通常有以下三種:

1.定時過期

每個設置過期時間的key都需要創建一個定時器,到過期時間就會立即清除。該策略可以立即清除過期的數據,對內存很友好;但是會占用大量的CPU資源去處理過期的數據,從而影響緩存的響應時間和吞吐量。

2.惰性過期

只有當訪問一個key時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節省CPU資源,卻對內存非常不友好。極端情況可能出現大量的過期key沒有再次被訪問,從而不會被清除,占用大量內存。

3.定期過期

每隔一定的時間,會掃描一定數量的數據庫的expires字典中一定數量的key,并清除其中已過期的key。該策略是前兩者的一個折中方案。通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和內存資源達到最優的平衡效果。

Redis中同時使用了惰性過期和定期過期兩種過期策略。

Redis淘汰策略

1.簡介

Redis的內存淘汰策略,是指當內存使用達到maxmemory極限時,需要使用LAU淘汰算法來決定清理掉哪些數據,以保證新數據的存入。

2、LRU算法

Redis默認情況下就是使用LRU策略算法。

LRU算法(least RecentlyUsed),最近最少使用算法,也就是說默認刪除最近最少使用的鍵。

但是一定要注意一點!redis中并不會準確的刪除所有鍵中最近最少使用的鍵,而是隨機抽取3個鍵,刪除這三個鍵中最近最少使用的鍵。

那么3這個數字也是可以可以設置采樣的大小,如果設置為10,那么效果會更好,不過也會耗費更多的CPU資源。對應位置是配置文件中的maxmeory-samples。

3.緩存清理配置

maxmemory用來設置redis存放數據的最大的內存大小,一旦超出這個內存大小之后,就會立即使用LRU算法清理掉部分數據。

對于64 bit的機器,如果maxmemory設置為0,那么就默認不限制內存的使用,直到耗盡機器中所有的內存為止;,但是對于32 bit的機器,有一個隱式的閑置就是3GB

4.Redis數據淘汰策略

maxmemory-policy,可以設置內存達到最大閑置后,采取什么策略來處理。

對應的淘汰策略規則如下:

1)noeviction:當內存不足以容納新寫入數據時,新寫入操作會報錯。

2)allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的key。

3)allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個key。

4)volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的key。

5)volatile-random:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個key。

6)volatile-ttl:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的key優先移除。


5.緩存清理的流程

1)客戶端執行數據寫入操作

2)redis server接收到寫入操作之后,檢查maxmemory的限制,如果超過了限制,那么就根據對應的policy清理掉部分數據

3)寫入操作完成執行。

總結

redis的內存淘汰策略用于處理內存不足時的需要申請額外空間的數據,內存淘汰策略的選取并不會影響過期的key的處理。過期策略用于處理過期的緩存數據。

你可能也喜歡:

  • Redis系列教程(三):如何解決Redis緩存雪崩、緩存穿透、緩存并發等5大難題
  • Redis系列教程(五):Redis哨兵、復制、集群的設計原理,以及區別
  • Redis系列教程(八):分布式鎖的由來、及Redis分布式鎖的實現詳解
  • Redis系列教程(六):Redis緩存和MySQL數據一致性方案詳解
  • Redis系列教程(四):Redis為什么是單線程、及高并發快的3大原因詳解
  • Redis系列教程(七):Redis并發競爭key的解決方案詳解

  • 總結

    以上是生活随笔為你收集整理的Redis系列教程(九):Redis的内存回收原理,及内存过期淘汰策略详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。