@cacheput没有更新现有的缓存
问题描述:
我正在使用Spring 4和Hazelcast 3.2。我正在尝试使用下面的代码向现有缓存中添加一条新记录。不知何故缓存没有得到更新,同时我也没有看到任何错误。下面是供参考的代码片段。@cacheput没有更新现有的缓存
注意: - 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;
}
答
我有同样的问题,并设法解决它。这个问题似乎与交易管理有关。 在创建或更新新记录的相同方法中基本更新缓存不起作用,因为事务未提交。这是我解决它的方法。
服务层调用回购插入用户 然后返回到服务层 插入/更新数据库调用 在我称为刷新缓存方法 返回的用户数据服务层后,该方法具有cacheput注解 之后,它的工作。
您正在为不同类型使用单个缓存。您首先缓存用户列表,然后期望cacheput将单个用户放入该缓存。这当然不起作用,它不会更新已经在缓存中的列表。 –
感谢您的回复。但这是我的要求。我需要用新添加的用户更新缓存(用户对象列表)。你可以请分享可行的解决方案来满足这一要求。 –
您将不得不手动更新缓存或不使用弹簧缓存抽象,而是使用简单的休眠二级缓存,为您解决这个问题。 –