码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Cache 自定义注解

时间:2016-05-23 17:05:56      阅读:585      评论:0      收藏:0      [点我收藏+]

标签:

1.在使用spring cache注解如cacheable、cacheevict、cacheput过程中有一些问题;

比如,我们在查到一个list后,可以将list缓存到一个键对应的区域里;当新增、修改、删除一个元素的时候,其实我们

需要的是只将cache的list里的元素变动就可以了,但因为只有一个键,没法做到只更改一个元素,只能整个list重新加载,

对性能还是有一定的影响;

2.对spring扩展,增加自定义cache,

@MyCacheDelete:当删除元素后,从cache里取出该key的缓存list,从list里删除指定id的元素,再将list写入缓存;

@MyCachePut :当新增修改元素后,从cache里找到该key对应的list,从list里找到修改的元素删除(新增不需要删除),然后将修改后的记录写入list,再将list写入缓存;

3.具体的步骤:

1)定义注解@MyCacheDelete,@MyCachePut

2)定义注解拦截器

技术分享

该拦截器,其中最重要的一点就是解析key值,因为在缓存查询数据时我们还是使用cacheable,所以定义的key也要和cacheable一致;

@MyCachePut( key="‘"+ ConstUtil.C_CACHE_KEY_PRE+"BasicData‘+#info.parentId",value = ConstUtil.C_CACHE_NAME, pid = "recid")

上面info.parentId的值, 是spring表达式运行时解析出的;所以自定义拦截器里也要和spring框架一样算出key值;

这里重新实现了CacheAnnotationParser,让它解析自定义的注解,这样,可以调用spring框架里的generateKey;

技术分享

3)有了cache的key,后面就简单了,就是从cache里的取数据、修改数据、更新缓存操作了;

虽然这种方式,解决了单条数据影响cache的list重新加载问题;但我们在设计缓存时,还是要尽量通过细分的业务去缓存对应的数据,不要让

缓存的list过大,过大的list对于cache的存取、序列化反序列化都有性能的影响;

Spring Cache 自定义注解

标签:

原文地址:http://www.cnblogs.com/sl21100/p/5520455.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!