我正在使用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;
}
答案 0 :(得分:1)
我有同样的问题,并设法解决了它。这个问题似乎与交易管理有关。 基本上,在创建或更新新记录的同一方法中更新缓存不起作用,因为事务未提交。这是我解决它的方式。
服务层调用repo来插入用户 然后返回服务层 插入/更新db调用之后 在服务层我称为刷新缓存方法 返回用户数据,此方法具有cacheput注释 之后它起作用了。
答案 1 :(得分:0)
另一种方法是,可以在用于@CacheEvict(allEntries = true)
或Save
或Update
记录的方法上使用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();
}