EHCache非常好.您可以创建内存缓存.查看他们的代码示例,了解创建内存缓存的示例.您可以指定最大尺寸和生存时间.
EHCache确实提供了一些高级功能,但如果您对使用它们不感兴趣 - 请不要.但如果您的要求发生变化,很高兴知道他们在那里.
这是一个内存缓存.在代码中创建,没有配置文件.
CacheManager cacheManager = CacheManager.getInstance(); int oneDay = 24 * 60 * 60; Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay); cacheManager.addCache(memoryOnlyCache);
创建一个可容纳200个元素的缓存,其ttl为24小时.
EHCache非常好.您可以创建内存缓存.查看他们的代码示例,了解创建内存缓存的示例.您可以指定最大尺寸和生存时间.
EHCache确实提供了一些高级功能,但如果您对使用它们不感兴趣 - 请不要.但如果您的要求发生变化,很高兴知道他们在那里.
这是一个内存缓存.在代码中创建,没有配置文件.
CacheManager cacheManager = CacheManager.getInstance(); int oneDay = 24 * 60 * 60; Cache memoryOnlyCache = new Cache("name", 200, false, false, oneDay, oneDay); cacheManager.addCache(memoryOnlyCache);
创建一个可容纳200个元素的缓存,其ttl为24小时.
我非常喜欢Google Guava(API)MapMaker
附带的内容
JavaDoc有一个非常简洁的例子,展示了它的易用性和强大功能:
ConcurrentMapgraphs = new MapMaker() .concurrencyLevel(32) .softKeys() .weakValues() .expiration(30, TimeUnit.MINUTES) .makeComputingMap( new Function () { public Graph apply(Key key) { return createExpensiveGraph(key); } });
此外,番石榴10.0版本引入了更广泛的com.google.common.cache
包.
您还可以在以下位置查看名为KittyCache的小缓存库:
https://github.com/treeder/kitty-cache
与ehcache有一些性能基准.
它在SimpleJPA项目中用作二级缓存.
Guava的MapMaker已被其CacheBuilder类所取代.
您可以查看LinkedHashMap以实现没有第三方jar的简单缓存:
Mapcache = new LinkedHashMap (MAX_ENTRIES + 1, .75F, true) { public boolean removeEldestEntry(Map.Entry eldest) { return size() > MAX_ENTRIES; } };
然后你就可以从缓存中获得
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); } }
休息时留给读者锻炼:)
JCS是经过验证的.尽管就缓存机制而言很轻松,但您可能会深入了解实际代码并模仿他们使用HashMap做的事情,以确切地了解您的需求而不是更多.你似乎很清楚你在寻找什么.