落实分页查询Redis在驱动下的应用(分页查询用redis)

  在信息技术越发发达、应用更加广泛的当今社会,分页查询方案更加被重视,对分页查询落实的技术有多种选择,也可以采用Redis进行分页查询落实,Redis常用于缓存计算结果,实际上还可以用来支持系统应用分页查询,下面来简单介绍一下Redis在分页查询中的应用。

  Redis能够将结果进行排序,综合考虑以往系统分页查询的增删改查都对Redis操作的一致性来说,往Redis中存入的Master的ID信息,根据上一页last_id和下一页last_id 将数据有序的存入Hash 并通过key值进行排序,利用SortedSet的zrevrange指令即可查到满足条件的想要的数据信息;下图为Redis分页查询的简单流程

![Redis分页查询的简单流程](http://img.sc125.com/uploads1/201809/18/1_1537250187389_6.png)

  下面来看实现代码,以用户查询历史数据为例,下面通过Redis做分页查询,来提升数据查询的性能:

// 将数据存入Redis
// HASH
RedisTemplate.opsForHash().put("userHistory", String.valueOf(System.currentTimeMillis()), userHisStr);
// SORTEDSET
RedisTemplate.opsForZSet().add("userHistorySet", String.valueOf(System.currentTimeMillis()), System.currentTimeMillis());
// Redis 分页查询
// 初始页(从第几页开始查询)
Integer pageNo = 0;
// 每页的条数
Integer pageSize = 30;
// 按照时间开始查询
Long lastId = System.currentTimeMillis();
// 查询数据
Set data = RedisTemplate.opsForZSet().reverseRangeByScore("userHistorySet", 0, lastId, pageNo * pageSize, (pageNo + 1) * pageSize);
Iterator it = data.iterator();
while (it.hasNext()){
Long id = Long.valueOf(String.valueOf(it.next()));
// 通过id找到完整的数据
String jsonStr = (String) RedisTemplate.opsForHash().get("teacher_his", String.valueOf(id));
UserHistory userHistory = JSON.parseObject(jsonStr, UserHistory.class);
System.out.println("查询结果:"+userHistory);
}

  Redis 在分页查询上应用效果明显,从代码上可见,Redis操作数据利用key来排序,这种key获取数据的方法比使用MySQL关系型数据库在性能上会有很大的提升,相应的,在Redis大数据查询时,也能较为准确、快速的获取到满足条件的数据信息。


数据运维技术 » 落实分页查询Redis在驱动下的应用(分页查询用redis)