Caching 更新Ehcache中的缓存值
我想第一次从DB中获取计数,然后更新本地缓存中的计数。对于任何进一步的请求,我需要为每个请求更新内存中的计数器变量,并使用更新的计数 我已经使用了Ehcache,下面是我从数据库获取的代码:Caching 更新Ehcache中的缓存值,caching,ehcache,Caching,Ehcache,我想第一次从DB中获取计数,然后更新本地缓存中的计数。对于任何进一步的请求,我需要为每个请求更新内存中的计数器变量,并使用更新的计数 我已经使用了Ehcache,下面是我从数据库获取的代码: @Override @CachePut(cacheNames="countCache", key="#id") public int getCountFromDB(int id, int length) { String sqlstm = "select count(*) from Table w
@Override
@CachePut(cacheNames="countCache", key="#id")
public int getCountFromDB(int id, int length) {
String sqlstm = "select count(*) from Table where length=:length";
Map<String, Object> namedParamsMap = new HashMap<String, Object>();
namedParamsMap.put("idd", idd);
namedParamsMap.put("length", length);
Integer li = namedParamJdbcTemplate.queryForObject(sqlstm, namedParamsMap, Integer.class);
return li;
}
如果使用新计数调用updateCounterCache,则缓存中的计数器不会得到更新。我哪里出了问题。我不确定我是否会使用缓存。我可能只是将初始值设置为原子长度。原因是,您似乎没有将值保存回数据库,缓存也不能保证在某个时候不会逐出该值,但实际上,除非缓存已满,否则Ehcache不会这样做 因此,这完全取决于价值对您的重要性 也就是说,您的问题是getCountFromDB应该使用@Cacheable而不是@CachePut。见下文
@Cacheable(cacheNames="countCache", key="#id")
public int getCountFromDB(int id, int length) {
String sqlstm = "select count(*) from Table where length=:length";
Map<String, Object> namedParamsMap = new HashMap<>(2);
namedParamsMap.put("idd", id);
namedParamsMap.put("length", length);
Integer li = namedParamJdbcTemplate.queryForObject(sqlstm, namedParamsMap, Integer.class);
return li;
}
我不确定我是否会使用缓存。我可能只是将初始值设置为原子长度。原因是,您似乎没有将值保存回数据库,缓存也不能保证在某个时候不会逐出该值,但实际上,除非缓存已满,否则Ehcache不会这样做 因此,这完全取决于价值对您的重要性 也就是说,您的问题是getCountFromDB应该使用@Cacheable而不是@CachePut。见下文
@Cacheable(cacheNames="countCache", key="#id")
public int getCountFromDB(int id, int length) {
String sqlstm = "select count(*) from Table where length=:length";
Map<String, Object> namedParamsMap = new HashMap<>(2);
namedParamsMap.put("idd", id);
namedParamsMap.put("length", length);
Integer li = namedParamJdbcTemplate.queryForObject(sqlstm, namedParamsMap, Integer.class);
return li;
}