论坛首页 Java企业应用论坛

Spring3.1.M1 Cache注解

浏览 13412 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-12-22  
wad12302 写道
hanqunfeng 写道
Jiagoo 写道
比如我缓存了一个userList,但是此时我修改一个User,如何刷新userList缓存?

举例:
1.增加userList缓存
@Cacheable(value="andCache",key="'ClassName'+'getUserList'") 
public List<SystemUser> getUserList() { 
    List<SystemUser> userList =  dao.getUserList();       
    return userList;        

2.清除userList缓存
@CacheEvict(value="andCache",key="'ClassName'+'getUserList'") 
public void modifyUser(SystemUser user) { 
    dao.update(user);


在你需要缓存结果集的方法上面增加@Cacheable注解,并给其起个key值,当方法第一次执行后缓存既生效,下次执行时则不会再执行方法体。
在你需要刷新缓存的方法上面增加@CacheEvict注解,并通过key定位到要清除的缓存,这里每当你执行 modifyUser方法后,都会清除掉userList缓存,也就是说,再次调用getUserList方法时会执行方法体。


我想他的意思是这个样子的:
我已经缓存了 一个list里面有5个user,
现在我修改了一个user1
但是我要刷新缓存的时候我只把user1替换了,而list的其他user没有替换,而不是重新加载一次list

请问这样子怎么解决?

重新加载一次list其他user不是也没有替换么?
为什么非要这样啊?
是想少读一次select * from user语句么?
楼上已经说得很清楚了,@Cacheable是基于方法的。
要实现你那样的应用是没问题,只能自己再搞搞。
0 请登录后投票
   发表时间:2011-12-22  
是想少读一次select * from user语句么?

是的,应为我只修改了user1,修改之后就直接刷新缓存中的user1

如果把这个list刷新了 又要重新select * from user。想避免这样的操作

想知道都有些什么方法
0 请登录后投票
   发表时间:2012-01-29  
CurrentJ 写道
hanqunfeng 写道
CodeDestiny 写道
不需要再配置什么拦截器之类了哇?
执行该方法时会默认根据cache key查找吧?这部分没有提到呢。


因为使用注解,spring会自动对注解进行拦截,所以不需要额外配置拦截器,但如果希望基于aop进行拦截,可以自己声明拦截器,不过个人感觉注解的方便些。
方法被执行后,如果下次调用方法的参数没有变化,则不会在调用方法,直接从缓存中查找,查找规则就是这个key,默认是参数值,自己重新指定key,就是避免不同方法使用相同的参数时对缓存会造出干扰,另外刷新时也可以精确匹配到要刷新的数据

支持集群吗?集群情况下是怎么刷新的?oscache刷新只能按group,比较烦。

如果要支持集群,貌似只能使用EHCACHE的集群功能。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics