更新 Ehcache 中的缓存值

updating the cache value in Ehcache

我想第一次从数据库中获取计数,然后更新本地缓存中的计数。对于任何进一步的请求,我需要为每个请求更新内存计数器变量并使用更新后的计数。

我使用了 Ehcache,以下是我从数据库中获取的代码:

@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;
}

2。我需要用计数器值更新这个缓存名称。我尝试使用以下方法:

   @CachePut(value = "countCache", key = "#id")
    public long updateCounterCache(int id, long count)
    {
        logger.error("In side ht thew updateCounterCache method "+count);
        return count;
    }

如果我用新计数调用 updateCounterCache,计数器不会在缓存中更新。我哪里错了。

我不确定我是否会为此使用缓存。我可能只是将初始值设置为 AtomicLong。原因是您似乎没有将值保存回数据库并且缓存永远不会保证该值不会在某个时候被驱逐(但实际上,除非缓存已满,否则 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;
}