6.Redis期限切れポリシーと淘汰メカニズム及び手書きLRU実現

1481 ワード

Redis失効ポリシー


定期削除+不活性削除
定期削除とは、Redisが一定時間にランダムに一部のkeyを選択して期限切れ判定を行い、keyが期限切れになった場合にkeyを削除することを意味します.すべて削除しない理由は、メモリ消費量が大きいため、Redisの稼働効率が低下するためです.
不活性削除は,定期削除ではRedis keyの期限切れ削除の問題を徹底的に解決できないため,ユーザがあるkeyを呼び出すと,そのkeyの生存時間が判断され,期限切れであれば削除され,期限切れでなければ使用が継続される.
定期削除+不活性削除の問題:
定期的に削除できず呼び出していないkeyが存在するか
解決方法:Redis淘汰メカニズム

Redis淘汰メカニズム


redisでconfファイルには、次の行の構成があります.
# maxmemory-policy volatile-lru

この構成は、メモリの淘汰ポリシーを設定します.
新しい書き込みデータを格納するメモリが不足している場合
  • noeviction(ɪˈvɪkʃn):新しい書き込み操作は
  • とエラーが発生します.
  • allkeys-lru:最近最も使用されていないKey
  • を除去
  • allkeys-random:キー
  • をランダムに削除
  • volatile-lru:有効期限が設定されているキースペースで、最も最近使用されていないKey
  • を削除します.
  • volatile-random:有効期限が設定されているキースペースから、キー
  • をランダムに削除します.
  • volatile-ttl:有効期限が設定されているキースペースで、より早い有効期限が設定されているKeyは
  • を優先的に削除する.

    手書きLRU

    public class LRUCache extends LinkedHashMap {
        
        private final int CACHE_SIZE;
    
        //                  
        public LRUCache(int cacheSize) {
            super((int) Math.ceil(cacheSize / 0.75) + 1, 0.75f, true); 
            //          HashMap      
            //       true     LinkedHashMap            
            //         ,        
            CACHE_SIZE = cacheSize;
        }
    
        @Override
        protected boolean removeEldestEntry(Map.Entry eldest) {
            return size() > CACHE_SIZE;
            //          map                  
            //           
        }
    }