问题描述
我知道实现起来很简单,但我想重用已经存在的东西.
I know it's simple to implement, but I want to reuse something that already exist.
我想解决的问题是,我为不同的页面、角色加载配置(从 XML,所以我想缓存它们),所以输入的组合可以增长很多(但 99% 不会).为了处理这 1%,我希望缓存中有一些最大项目数...
Problem I want to solve is that I load configuration (from XML so I want to cache them) for different pages, roles, ... so the combination of inputs can grow quite much (but in 99% will not). To handle this 1%, I want to have some max number of items in cache...
直到知道我在 apache commons 中找到了 org.apache.commons.collections.map.LRUMap,它看起来不错,但还想检查其他东西.有什么推荐吗?
Till know I have found org.apache.commons.collections.map.LRUMap in apache commons and it looks fine but want to check also something else. Any recommendations?
推荐答案
您可以使用 LinkedHashMap (Java 1.4+) :
You can use a 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);
这篇关于在java中简单易用的LRU缓存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!