1. ホーム
  2. java

javaで簡単、シンプルに使えるLRUキャッシュ

2023-10-13 04:30:09

質問

実装は簡単なのですが、既にあるものを再利用したいのです。

私が解決したい問題は、異なるページ、ロール、...のために設定(XMLからなので、それらをキャッシュしたい)をロードするので、入力の組み合わせはかなり大きくなる可能性があります(しかし99%はそうではありません)。この1%を処理するために、私はキャッシュ内のアイテムのいくつかの最大数を持ちたい....

私はapache commonsでorg.apache.collections.map.LRUMapを見つけ、それはうまく見えるが、何か他のものもチェックしたいことを知るまでです。何か推奨されるものはありますか?

どのように解決するには?

あなたは LinkedHashMap (Java 1.4+) を使用します.

// Create cache
final int MAX_ENTRIES = 100;
Map cache = new LinkedHashMap(MAX_ENTRIES+1, .75F, true) {
    // This method is called just after a new entry has been added
    public boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }
};

// Add to cache
Object key = "key";
cache.put(key, object);

// Get object
Object o = cache.get(key);
if (o == null && !cache.containsKey(key)) {
    // Object not in cache. If null is not a possible value in the cache,
    // the call to cache.contains(key) is not needed
}

// If the cache is to be used by multiple threads,
// the cache must be wrapped with code to synchronize the methods
cache = (Map)Collections.synchronizedMap(cache);