为了提高查询速度,我们通常把数据缓存在redis中,分页的代码如下:
public static final int LASTEST_RECORDS_NUM = 100;
public static final int LASTEST_PAGE = 5;
public List<Student> getStudents(long classId, int page, int size) {
if (page > LASTEST_PAGE) {
List<Student> students = studentDao.query(classId, size, page);
return students;
} else {
List<Student> studentsIncache = studentCache.getLatestStudents(classId);
if (studentsIncache == null) {
studentsIncache = studentDao.query(classId, LASTEST_RECORDS_NUM, 1);
if (CollectionUtils.isEmpty(studentsIncache)) {
studentCache.setLatestStudents(classId, ListUtils.EMPTY_LIST);
return ListUtils.EMPTY_LIST;
}
studentCache.setLatestStudents(classId, studentsIncache);
}
if (studentsIncache.size() <= (page - 1) * size) {
return ListUtils.EMPTY_LIST;
}
int fromIndex = (page - 1) * size;
int toIndex = studentsIncache.size() >= page * size ? page * size : studentsIncache.size();
if (fromIndex > toIndex) {
return ListUtils.EMPTY_LIST;
}
List<Student> students = studentsIncache.subList(fromIndex, toIndex);
return students;
}
}