锁定老帖子 主题:Spring3.1.M1 Cache注解
精华帖 (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是基于方法的。 要实现你那样的应用是没问题,只能自己再搞搞。 |
|
返回顶楼 | |
发表时间:2011-12-22
是想少读一次select * from user语句么?
是的,应为我只修改了user1,修改之后就直接刷新缓存中的user1 如果把这个list刷新了 又要重新select * from user。想避免这样的操作 想知道都有些什么方法 |
|
返回顶楼 | |
发表时间:2012-01-29
CurrentJ 写道 hanqunfeng 写道 CodeDestiny 写道 不需要再配置什么拦截器之类了哇?
执行该方法时会默认根据cache key查找吧?这部分没有提到呢。 因为使用注解,spring会自动对注解进行拦截,所以不需要额外配置拦截器,但如果希望基于aop进行拦截,可以自己声明拦截器,不过个人感觉注解的方便些。 方法被执行后,如果下次调用方法的参数没有变化,则不会在调用方法,直接从缓存中查找,查找规则就是这个key,默认是参数值,自己重新指定key,就是避免不同方法使用相同的参数时对缓存会造出干扰,另外刷新时也可以精确匹配到要刷新的数据 支持集群吗?集群情况下是怎么刷新的?oscache刷新只能按group,比较烦。 如果要支持集群,貌似只能使用EHCACHE的集群功能。 |
|
返回顶楼 | |