日期:2014-05-19 浏览次数:20782 次
//每次从已检索的list结果集中取某一页的数据 List<XXXData> getPageData(List<XXXData> list, int page, int pageRecordCount) { List<XXXData> result = new ArrayList<XXXData>(); int offset = (page-1)*pageRecordCount; for (int i=0; i<pageRecordCount && i+offset<list.size(); i++) { result.add(list.get(i+offset)); } return result; }
------解决方案--------------------
如果楼主所要查的数据是不变的那些。。
可以考虑使用MYSQL缓存。
------解决方案--------------------
假定你每页显示记录数不变
在session中缓存这样一个对象:Map<查询条件,Map<页号,数据List>> cachedResults
将查询条件拼装成第一层Map的key,页号作为第二层Map的key
查询时先看cachedResults里面有没有对应的查询条件及页号的list,有则取出来返回,没有则到数据库查询,然后放到cachedResults中,再返回
当然,这种方案也可以搞成缓存js对象的版本
------解决方案--------------------
查询缓存,如果数据不是改变频繁的话下面几种方法吧.
1.直接开启"hibernate"的查询缓存就行了.
2.使用lucene来存放数据的ID列表,以此代替数据库的列表查询.
3.使用OSCache或者其他缓存实现,将查询的ID列表放到缓存中,和第2种一样其实只是换个存放点.当然如果数据量较大,可以拆分每个List的大小,分成几个list来存放.
以下都只是针对原始数据的缓存,如果是页面又不改变数据那最简单不过了,按页缓存或者直接生成静态化.