我正在使用Google Guice实例化LoadinCache以使用番石榴缓存。
我的绑定在下面:
bind(new TypeLiteral<LoadingCache<SelectRequest, SelectCResponse>>() {})
.toInstance(
CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterAccess(60, TimeUnit.MINUTES)
.recordStats()
.build(
new CacheLoader<SelectRequest, SelectResponse>() {
@Override
public SelectResponse load(
SelectRequest selectRequest) {
System.out.println("inside load method of cache : when cache not found");
return Select.read(selectRequest);
}
}));
并且我在下面的impl课堂中进行注入:
@Inject
public CeImpl(final LoadingCache<SelectRequest, SelectResponse> cache)
和方法
SelectResponse res = cache.get(selectCeBlobOracleRequest);
当我测试此代码时,缓存实际上并未缓存我的记录。这里可能是什么问题?它总是命中数据库。
我有任何错误的驱逐政策吗?
我每次发送到缓存时都在创建一个新请求。通过创建单个请求实例解决了此问题。