Spring 的@CachePut注释是否适用于 void 返回类型?



我正试图使用Ehcache和Spring 3.1内置缓存注释(@Cacheable、@CacheEvict和@CachePut)在我的应用程序中实现缓存。

我创建了一个缓存如下:

@Cacheable(value = "userCache", key = "#user.id")
public List<User> getAllUsers() {
...
}

我正试图使用@CachePut注释用一个新值更新这个缓存,如下所示:

@CachePut(value = "userCache", key = "#user.id")
public void addUser(User user) {
...
}

但是,新的"用户"不会添加到缓存中。这是因为void返回类型吗?

是的,这是因为void返回类型。@CachePut注释将方法的结果放入缓存中。在您的情况下,没有结果,因此不会将任何内容放入缓存。

更改方法签名以返回用户:

public User addUser(User user) { 
   ...
}

这不会起作用,因为您使用的缓存值"userCache"相同,但方法getAllUsers的返回类型为List,addUser的返回类型是User。这将在已经存储在高速缓存中的数据中产生不一致性。

(列表+用户):此类数据将在缓存中形成

稍后,当您调用方法getAllUsers时,代码将是

List userList=getAllUsers()

但在这种情况下,数据将从缓存中提取并抛出"类强制转换异常"。

As,(List+User)不能强制转换为List

有什么解决办法吗?我陷入了困境,不知道该怎么办。使用自定义注释在这里工作吗?

最新更新