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

    } 
+3

您正在为不同类型使用单个缓存。您首先缓存用户列表,然后期望cacheput将单个用户放入该缓存。这当然不起作用,它不会更新已经在缓存中的列表。 –

+0

感谢您的回复。但这是我的要求。我需要用新添加的用户更新缓存(用户对象列表)。你可以请分享可行的解决方案来满足这一要求。 –

+0

您将不得不手动更新缓存或不使用弹簧缓存抽象,而是使用简单的休眠二级缓存,为您解决这个问题。 –

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

服务层调用回购插入用户 然后返回到服务层 插入/更新数据库调用 在我称为刷新缓存方法 返回的用户数据服务层后,该方法具有cacheput注解 之后,它的工作。