@cacheput未更新现有缓存

时间:2015-10-15 17:37:42

标签: spring hazelcast

我正在使用Spring 4和Hazelcast 3.2。我正在尝试使用以下代码将新记录添加到现有缓存中。某种程度上缓存没有得到更新,同时我也没有看到任何错误。以下是供参考的代码段。

注意: - Cacheable工作正常,只有cacheput无效。请点亮这个

@SuppressWarnings("unchecked")`enter code here`
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    @Cacheable(value="user-role-data")
    public List<User> getUsersList() {
    // Business Logic
    List<User> users= criteriaQuery.list();

    }

@SuppressWarnings("unchecked")
    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    @CachePut(value = "user-role-data")
    public User addUser(User user) {
                    return user;

    } 

2 个答案:

答案 0 :(得分:1)

我有同样的问题,并设法解决了它。这个问题似乎与交易管理有关。 基本上,在创建或更新新记录的同一方法中更新缓存不起作用,因为事务未提交。这是我解决它的方式。

服务层调用repo来插入用户 然后返回服务层 插入/更新db调用之后 在服务层我称为刷新缓存方法 返回用户数据,此方法具有cacheput注释 之后它起作用了。

答案 1 :(得分:0)

另一种方法是,可以在用于@CacheEvict(allEntries = true)SaveUpdate记录的方法上使用Delete。它将刷新现有的缓存。

示例:

@CacheEvict(allEntries = true) 
public void saveOrUpdate(Person person) 
{
     personRepository.save(person);
}

下次您调用@Cacheable方法时,将形成具有更新结果的新缓存

示例:

@Cacheable // caches the result of getAllPersons() method
public List<Person> getAllPersons() 
{
     return personRepository.findAll();
}