【发布时间】:2013-10-31 16:36:33
【问题描述】:
我有几十个像 PersonDao 这样的数据访问对象,方法如下:
Person findById(String id) {}
List<Person> search(String firstName, LastName, Page) {}
int searchCount(String firstName, LastName) {}
我已经尝试使用这些类之一添加番石榴缓存,这确实很好,但是有很多样板。
这是一个先在缓存中查找 findById 的示例:
private final LoadingCache<String, Person> cacheById = CacheBuilder.newBuilder()
.maximumSize(maxItemsInCache)
.expireAfterWrite(cacheExpireAfterMinutes, TimeUnit.MINUTES)
.build(new CacheLoader<String, Person>() {
public Person load(String key) {
return findByIdNoCache(key);
});
//.... and update findById to call the cache ...
@Override
public Person findById(String id) {
return cacheById.getUnchecked(id);
}
所以,因为每个方法都有不同的参数和返回类型,我最终为每个方法创建了一个单独的 cacheLoader!
我尝试将所有内容整合到一个 CacheLoader 中,该 CacheLoader 返回 Object 类型并接受对象 Map,但我最终以丑陋的 if/else 来确定调用哪个方法来加载缓存。
我正在努力寻找一种优雅的方式来为这些数据访问对象添加缓存,有什么建议吗?也许番石榴缓存不适用于这个用例?
【问题讨论】: