论坛首页 Java企业应用论坛

ehcache 缓存的思路

浏览 2773 次
精华帖 (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清除后 还是得去数据库查找.

查询频繁的情况.

 

 

目前比较疑问的是统计查询,如果一条记录变更了,统计查询的值可能就不准确.不知道有什么好的方法.

 

   发表时间:2012-05-23  
楼主,咱们可是产生了同样的问题。我也是查询这里没搞好。
等大侠提供下思路。
0 请登录后投票
   发表时间:2012-05-29  
目前我也正在为缓存的设计烦恼,楼上的思路让我觉得获益匪浅,有几个问题想请教下:
1.每个实体类建立一个cacheName,这样cacheName会不会太多了,有没有什么性能方面的影响?
2.每个cacheName中,key的数量太少了(查询条件一般也没几个),假如不为每个实体类建立cacheName,而采取实体类+key这样的组合方式作为新key,会不会更好一些?
0 请登录后投票
   发表时间:2012-05-29  
可以将DB中的数据放到Cookie中,从Cookie进行业务逻辑处理。
0 请登录后投票
论坛首页 Java企业应用版

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