我正试图使用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返回类型吗?
更改方法签名以返回用户:
public User addUser(User user) {
...
}
这不会起作用,因为您使用的缓存值"userCache"相同,但方法getAllUsers的返回类型为List,addUser的返回类型是User。这将在已经存储在高速缓存中的数据中产生不一致性。
(列表+用户):此类数据将在缓存中形成
稍后,当您调用方法getAllUsers时,代码将是
List userList=getAllUsers()
但在这种情况下,数据将从缓存中提取并抛出"类强制转换异常"。
As,(List+User)不能强制转换为List
有什么解决办法吗?我陷入了困境,不知道该怎么办。使用自定义注释在这里工作吗?