简单的Java缓存库或设计模式?

nn4*_*n4l 10 java memcached caching design-patterns ehcache

我需要经常访问耗时计算的结果.结果不经常更改,因此我不得不不时重新计算数据,但可以暂时使用过时的结果.最简单的方法是什么?现有的库方法或设计模式是什么?

我在想类似的东西

private static List myCachedList = null;

...

// refresh list once in 3600 seconds
if (needsRefresh(myCachedList, 3600)) {
    // run the calculation
    myCachedList = ...
}
// use either updated or previous value from here on
Run Code Online (Sandbox Code Playgroud)

一个正确的实现可能不是微不足道的,它可能必须处理线程安全,竞争条件等,所以我宁愿使用一个经过验证的实现,而不是在我自己.

Bri*_*new 15

恭喜你意识到写你自己的东西最初会出现问题!

我会查看Guava缓存解决方案.Guava是一个经过验证的库,通过流畅的工厂API可轻松获得(并可配置)缓存.

所有Guava缓存,无论是否加载,都支持方法get(K,Callable <V>).此方法返回与缓存中的键关联的值,或者从指定的Callable计算它并将其添加到缓存中.在加载完成之前,不会修改与此高速缓存关联的可观察状态.此方法提供了传统"if cached,return;否则create,cache和return"模式的简单替代.