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

若鱼1919 2012-04-13 03:56:32
我能想到的有两种处理方式:
(1)缓存的是一页数据的list,等到过期时间到了,自动删除。这种方案的问题是:实时性太差了!
(2)缓存的是一个一个的对象,当分页查询的时候,首先是查数据库,把数据的id查出来,然后根据id查缓存,如果查不到就再查数据库。这种方案的问题是:及时缓存里面有完整的一夜的数据,也会额外的查一次数据库。并且,如果缓存的数据被删除掉,会多次查询,才能构造出完整的一页数据,而直接查数据库的话,只需要一次查询!

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


...全文
1260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cseu 2012-04-13
  • 打赏
  • 举报
回复
首先,我想问楼主为什么要做缓存?你的分页查询的是性能瓶颈吗?
在数据量不是很大的情况下,分页查询应该不是性能瓶颈
在数据量比较大的情况下,查询条件的不同,返回的结果差异很大,做缓存也起不到多少作用,反而有点画蛇添足。
安特矮油 2012-04-13
  • 打赏
  • 举报
回复
其实如果考虑时效性的话,又何必缓存数据呢?直接数据库分页查询就是了。如果需要时效性,那么在增加的时候就把对象增加到缓存当中,这样的问题就是,内存消耗会越来越大。反正任何方法都是有利有弊的,看个人更偏向于哪方面而定
gukuitian 2012-04-13
  • 打赏
  • 举报
回复
对缓存的更新应该在数据操作的时候控制。
假如用你的第2个方法,缓存的维护就不在查询端了。
但数据量大的话,放在内存中明显不合适,要是物理缓存,更新缓存又太费劲。
gukuitian 2012-04-13
  • 打赏
  • 举报
回复
分页查询就别考虑实时性了吧。
查询页面加载完了,你加几条数据,数据的顺序不知道,总条数,总页数都变了。怎么处理?
感觉根据根据sql来缓存就可以
想喝咖啡的貓 2012-04-13
  • 打赏
  • 举报
回复
貌似1适合 超大数据量的时候,但 应该是缓存前几页吧...
这是一个实际使用中的项目,可访问 http://cdbke.cuit.edu.cn 可查看效果及功能,后台需要登录后才能使用(出于安全性考虑这里就不给大家介绍了,另外还有一个struts1版本的,如有需要可以与我联系)。 此项目整合了目前主流和最前源的web开发技术:采用ehcache实现二级缓存(包含查询缓存);用sf4j及logback(log4j的升级版)记录日志;proxool(据说是dbcp和c3p0三者中最优秀的)连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发的。虽然后台逻辑并不复杂,但已经包含了架构基于s2sh技术型系统的全部基础部分:如分页,缓存,文件上传,连接池等。很适合学习使用,希望对初学JavaEE WEB开的人有所帮助。 这个资源在去年发布了第一版,已经有很多朋友下了觉得对他们有帮助,所以我才再发了一个第二版,希望对有需要的朋友有所帮助。本版本全面更新了jar包,全部使用了当前最新版本的jar包,struct2.1.8 spring3 hibernate3.5,全面使用注解取代xm的l配置。 另外增加了一个ant构建脚本,支持使用hudson完成每日构建,持续集成,自动测试,代码规范检查,代码审查等功能(与此相关的jar包由于上传文件大小限制未导入) 本系统一直在使用中,所以还会不段更新,之后我打算再一个基于javaee6的实现,给需要想学习ejb3.1等技术的朋友一个参考实现 集成测试相关jar包和更新构建脚本下载:http://download.csdn.net/source/2427972

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧