91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis中有哪些過期策略

發布時間:2021-08-09 11:56:51 來源:億速云 閱讀:154 作者:Leah 欄目:大數據

這篇文章給大家介紹redis中有哪些過期策略,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

redis 過期策略

redis 過期策略是:定期刪除+惰性刪除。

所謂定期刪除,指的是 redis 默認是每隔 100ms 就隨機抽取一些設置了過期時間的 key,檢查其是否過期,如果過期就刪除。

假設 redis 里放了 10w 個 key,都設置了過期時間,你每隔幾百毫秒,就檢查 10w 個 key,那 redis 基本上就死了,cpu 負載會很高的,消耗在你的檢查過期 key 上了。注意,這里可不是每隔 100ms 就遍歷所有的設置過期時間的 key,那樣就是一場性能上的災難。實際上 redis 是每隔 100ms 隨機抽取一些 key 來檢查和刪除的。

但是問題是,定期刪除可能會導致很多過期 key 到了時間并沒有被刪除掉,那咋整呢?所以就是惰性刪除了。這就是說,在你獲取某個 key 的時候,redis 會檢查一下 ,這個 key 如果設置了過期時間那么是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。

獲取 key 的時候,如果此時 key 已經過期,就刪除,不會返回任何東西。

但是實際上這還是有問題的,如果定期刪除漏掉了很多過期 key,然后你也沒及時去查,也就沒走惰性刪除,此時會怎么樣?如果大量過期 key 堆積在內存里,導致 redis 內存塊耗盡了,咋整?

答案是:走內存淘汰機制。

內存淘汰機制

redis 內存淘汰機制有以下幾個:

  • noeviction: 當內存不足以容納新寫入數據時,新寫入操作會報錯,這個一般沒人用吧,實在是太惡心了。

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

  • allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個 key,這個一般沒人用吧,為啥要隨機,肯定是把最近最少使用的 key 給干掉啊。

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

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

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

手寫一個 LRU 算法

你可以現場手寫最原始的 LRU 算法,那個代碼量太大了,似乎不太現實。

不求自己純手工從底層開始打造出自己的 LRU,但是起碼要知道如何利用已有的 JDK 數據結構實現一個 Java 版的 LRU。

class LRUCache<K, V> extends LinkedHashMap<K, V> {    
   private final int CACHE_SIZE;    
   /**    
    * 傳遞進來最多能緩存多少數據    
    *    
    * @param cacheSize 緩存大小    
    */    public LRUCache(int cacheSize) {        
       // true 表示讓 linkedHashMap 按照訪問順序來進行排序,最近訪問的放在頭部,最老訪問的放在尾部。        super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true);        
       CACHE_SIZE = cacheSize;    }    
   @Override    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {        
       // 當 map中的數據量大于指定的緩存個數的時候,就自動刪除最老的數據。        return size() > CACHE_SIZE;    } }

關于redis中有哪些過期策略就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽江市| 武邑县| 永嘉县| 吴旗县| 凌源市| 彩票| 利津县| 文成县| 大丰市| 城固县| 嘉定区| 金沙县| 瑞金市| 清涧县| 通化市| 澄城县| 侯马市| 泗水县| 上杭县| 新密市| 日照市| 淄博市| 建昌县| 兴和县| 郴州市| 宁乡县| 曲水县| 巧家县| 宁陵县| 温州市| 高陵县| 长丰县| 宁武县| 肥乡县| 普定县| 锡林郭勒盟| 英超| 增城市| 嘉义县| 邵东县| 长海县|