论坛首页 Java企业应用论坛

关于分页查询如何做缓存的问题

浏览 13964 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-17  
我说下我们下载的解决方案,
springMvc + ehcache
缓存是使用 注解做的,缓存的是一页的数据,缓存是有生命周期的,
到时间自动刷新,时间也好控制,使用方便,配置简单,是杀人,放火的必备良药
0 请登录后投票
   发表时间:2012-04-17  
我也很想知道有没什么比较好的方案
0 请登录后投票
   发表时间:2012-04-17  
goldenfish1919 写道
我能想到的有两种处理方式:

(1)缓存的是一页数据的list,等到过期时间到了,自动删除。这种方案的问题是:实时性太差了!

(2)缓存的是一个一个的对象,当分页查询的时候,首先是查数据库,把数据的id查出来,然后根据id查缓存,如果查不到就再查数据库。这种方案的问题是:及时缓存里面有完整的一夜的数据,也会额外的查一次数据库。并且,如果缓存的数据被删除掉,会多次查询,才能构造出完整的一页数据,而直接查数据库的话,只需要一次查询!

这两种方式的弊端都很明显,大家是如何处理的呢?


根据楼主的表述,发现业务不需要考虑下面两种情况:
(1)分页的大小改变问题
(2)分页数据的排序问题
那么剩下来就只有缓存数据量和更新频度的问题了。一般适合放到缓存的数据都是更新频度比较低的,否则就加重缓存的维护负担,增加复杂性,综合起来可能还不如不用缓存。看楼主的业务是分页数据,我猜想可能是类似排行榜之类的数据,或者是统计结算相关的结果数据。这类数据是很适合缓存的,如果楼主追求一个通用的可靠方案,可以考虑Redis来做缓存,List或Set数据类型都可以。
对于大数据量的分页数据,就需要按照实际情况来处理了,根据调查一般分页很多的数据,用户一般只会关注前面的十几页。所以,楼主可以把前n条数据缓存起来,其他的直接查数据库就可以了。
0 请登录后投票
   发表时间:2012-04-17  
楼主, 分页都要做缓存, 那一定是出现这些数据存在复杂的业务逻辑, 或是N多表的关联查询, 数据挖取性能上存在问题。如果是这种场景, 建议从逻辑或数据库表结构上做调整, 不是很适合用缓存。
0 请登录后投票
论坛首页 Java企业应用版

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