我试图在我的应用程序中使用Ehcache和内置缓存注释的Spring 3.1(@ Cryache,@ 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返回类型吗?
答案 0 :(得分:7)
是的,这是因为void返回类型。 @CachePut注释将方法的结果放入缓存中。在你的情况下,没有结果,所以没有任何东西放到缓存。
更改方法签名以返回用户:
public User addUser(User user) {
...
}
答案 1 :(得分:2)
这不会起作用,因为你正在使用相同的缓存值&#34; userCache&#34;但返回类型的方法getAllUsers是List,返回类型的addUser是User。这将导致存储在缓存中的数据不一致。
(列表+用户):此类数据将在缓存中形成。
稍后当你调用方法getAllUsers时,代码将是
列出userList = getAllUsers();
但是在这种情况下,数据将从缓存中获取并抛出&#34; Class cast Exception&#34;。
因为,(列表+用户)无法转换为列表。
这有什么解决方案吗?我坚持这个,不知道如何继续。使用自定义注释会在这里工作吗?