我正在寻找一个Java内存中对象缓存API.有什么建议?你过去使用过什么解决方案?
现在,我只是使用地图:
Map cache = new HashMap<String, Object>();
cache.put("key", value);
Run Code Online (Sandbox Code Playgroud)
我需要扩展缓存以包括以下基本功能:
但是,我不需要更复杂的功能,如:
内存缓存:
企业缓存:
Ste*_*e K 55
EHCache非常好.您可以创建内存缓存.查看他们的代码示例,了解创建内存缓存的示例.您可以指定最大尺寸和生存时间.
EHCache确实提供了一些高级功能,但如果您对使用它们不感兴趣 - 请不要.但如果您的要求发生变化,很高兴知道他们在那里.
这是一个内存缓存.在代码中创建,没有配置文件.
CacheManager cacheManager = CacheManager.getInstance();
int oneDay = 24 * 60 * 60;
Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay);
cacheManager.addCache(memoryOnlyCache);
Run Code Online (Sandbox Code Playgroud)
创建一个可容纳200个元素的缓存,其ttl为24小时.
Joa*_*uer 45
我非常喜欢Google Guava(API)MapMaker
附带的内容
JavaDoc有一个非常简洁的例子,展示了它的易用性和强大功能:
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(32)
.softKeys()
.weakValues()
.expiration(30, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
Run Code Online (Sandbox Code Playgroud)
此外,番石榴10.0版本引入了更广泛的com.google.common.cache
包.
Tra*_*der 10
您还可以在以下位置查看名为KittyCache的小缓存库:
https://github.com/treeder/kitty-cache
与ehcache有一些性能基准.
它在SimpleJPA项目中用作二级缓存.
您可以查看LinkedHashMap以实现没有第三方jar的简单缓存:
Map <String, Foo> cache = new LinkedHashMap<String, Foo>(MAX_ENTRIES + 1, .75F, true) {
public boolean removeEldestEntry(Map.Entry<String, Foo> eldest) {
return size() > MAX_ENTRIES;
}
};
Run Code Online (Sandbox Code Playgroud)
然后你就可以从缓存中获得
Foo foo = cache.get(key);
if (foo == null && !cache.containsKey(key)) {
try {
FooDAO fooDAO = DAOFactory.getFooDAO(conn);
foo = fooDAO.getFooByKey(key);
cache.put(key, foo);
} catch (SQLException sqle) {
logger.error("[getFoo] SQL Exception when accessing Foo", sqle);
}
}
Run Code Online (Sandbox Code Playgroud)
休息时留给读者锻炼:)