浏览 9969 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-12
因为最近用到Spring 3.1的注解cache.小弟有个问题想请教. 比如说在分页查询时 我想缓存
@Cacheable(value="posts",key="'getPosts_'+#blogId+'_'+#firstindex+'_'+#maxresult") public QueryResult<Posts> getPosts(Integer blogId, int firstindex,int maxresult) { ... } 此时是进行分页的缓存, 表示查询的是blog为id的用户下从firstindex开始一共maxresult条博客文章记录. 但是如果该用户添加或修改了一篇文章 那么这个缓存就应该evict.
public void update(Posts post) { baseDao.update(post); }blogId我可以使用Spring el 【#post.blog.id】拿到,这个时候我要清理缓存就要进行模糊的匹配 类似于这样的
@CacheEvict(value="posts",key="'getPosts_'+#post.blogs.id+'_*'"),就是把【#firstindex+'_'+#maxresult】换成了【*】.但是Spring EL不支持这样的写法.查了文档也没看到Spring EL支持*匹配的. 不知道怎么个写法能解决这个问题,或者说换个换个缓存的思路? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-12
最后修改:2012-05-12
cache只是key-value 不支持模糊删除的。
建议: 摒弃Spring的注解式Cache,自己使用AOP来实现。 思路1,使用现有的缓存框架,如Ehcache: 1、select时 blogId_pages ------> 记录分页页码数据(这样当清除时 可以根据缓存的页码删除) 缓存多少页需要根据自己的需求制定 blogId-page ------> 缓存每页的数据 2、update/delete/insert 首先查询blogId_pages 得到所有缓存的页码 再根据页码删除 blog-page 缓存的数据即可 帖子缓存可以根据热门度缓存,如一个帖子一天只有10个访问量 可以考虑不缓存! 思路2,构建自己的缓存数据结构,如使用LinkedHashMap构建LRU缓存: 1、帖子Map <帖子id, 回复分页Map> 2、回复分页Map <页码, 分页数据> 欢迎讨论 |
|
返回顶楼 | |
发表时间:2012-05-12
jinnianshilongnian 写道 cache只是key-value 不支持模糊删除的。
建议: 摒弃Spring的注解式Cache,自己使用AOP来实现。 思路1,使用现有的缓存框架,如Ehcache: 1、select时 blogId_pages ------> 记录分页页码数据(这样当清除时 可以根据缓存的页码删除) 缓存多少页需要根据自己的需求制定 blogId-page ------> 缓存每页的数据 2、update/delete/insert 首先查询blogId_pages 得到所有缓存的页码 再根据页码删除 blog-page 缓存的数据即可 帖子缓存可以根据热门度缓存,如一个帖子一天只有10个访问量 可以考虑不缓存! 思路2,构建自己的缓存数据结构,如使用LinkedHashMap构建LRU缓存: 1、帖子Map <帖子id, 回复分页Map> 2、回复分页Map <页码, 分页数据> 欢迎讨论 感谢大哥提供思路,本来也是打算自己结合ehcache写一个的.谢谢. |
|
返回顶楼 | |
发表时间:2012-05-12
cowboy_bebop 写道 jinnianshilongnian 写道 cache只是key-value 不支持模糊删除的。
建议: 摒弃Spring的注解式Cache,自己使用AOP来实现。 思路1,使用现有的缓存框架,如Ehcache: 1、select时 blogId_pages ------> 记录分页页码数据(这样当清除时 可以根据缓存的页码删除) 缓存多少页需要根据自己的需求制定 blogId-page ------> 缓存每页的数据 2、update/delete/insert 首先查询blogId_pages 得到所有缓存的页码 再根据页码删除 blog-page 缓存的数据即可 帖子缓存可以根据热门度缓存,如一个帖子一天只有10个访问量 可以考虑不缓存! 思路2,构建自己的缓存数据结构,如使用LinkedHashMap构建LRU缓存: 1、帖子Map <帖子id, 回复分页Map> 2、回复分页Map <页码, 分页数据> 欢迎讨论 感谢大哥提供思路,本来也是打算自己结合ehcache写一个的.谢谢. 客气,你试试,不一定满足你的需求,等你有了好的想法,把实现思路给大家讲讲 |
|
返回顶楼 | |
发表时间:2012-05-13
spring cache 的重点在于cache、put、evict之间的关系 而不是怎么去存、存在哪里
|
|
返回顶楼 | |