浏览 2777 次
锁定老帖子 主题:ehcache 缓存的思路
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-17
最后修改:2012-05-17
小弟目前在做缓存相关的东西,本来打算使用 spring3.1的注解cache,但是感觉不太合意. 所以自己想了下思路.没有使用AOP,在通用的dao层实现的缓存.目前只实现了单体和列表查询, 统计查询还没想好.
单体的缓存: cacheName key value 实体类的名称 id 对象实体 -->这个是根据id查询的 实体类的名称 条件查询组合的key 对象id -->条件查询
列表查询(包括分页) cacheName key value 实体类的名称 查询组合key List<id> -->只保存id
单体查询没什么好说的,list查询出来的是id列表,根据id到缓存中找,都存在那最好,如果有不存在的使用where in(id1,id2..)到数据库中去查. 最坏的时候也就是2条语句. 当记录update 或 delete时,将对应的缓存清除,这样对列表查询没什么影响.
但是当要添加记录的时候,list列表就有可能会不同步. 比如说 第一页的数据是 9,8,7,6,5 下面添加一条记录 那么第一页就可能会是 10,9,8,7,6 小弟目前想到的就是对于list 查询 不管怎么样 都去数据库查询 id集合,然后根据id去缓存中找对应的数据,不存在的 去数据库查. 如果记录添加操作不是很频繁, 这种方法可能就不太好.
本来想当添加记录时,清除对应的list,但是这样的话,我还得去找到和我添加记录相关的list,而且list清除后 还是得去数据库查找. 查询频繁的情况.
目前比较疑问的是统计查询,如果一条记录变更了,统计查询的值可能就不准确.不知道有什么好的方法.
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-05-23
楼主,咱们可是产生了同样的问题。我也是查询这里没搞好。
等大侠提供下思路。 |
|
返回顶楼 | |
发表时间:2012-05-29
目前我也正在为缓存的设计烦恼,楼上的思路让我觉得获益匪浅,有几个问题想请教下:
1.每个实体类建立一个cacheName,这样cacheName会不会太多了,有没有什么性能方面的影响? 2.每个cacheName中,key的数量太少了(查询条件一般也没几个),假如不为每个实体类建立cacheName,而采取实体类+key这样的组合方式作为新key,会不会更好一些? |
|
返回顶楼 | |
发表时间:2012-05-29
可以将DB中的数据放到Cookie中,从Cookie进行业务逻辑处理。
|
|
返回顶楼 | |