博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用redis缓存对 list集合中的数据 进行分页操作
阅读量:6244 次
发布时间:2019-06-22

本文共 2132 字,大约阅读时间需要 7 分钟。

hot3.png

利用redis缓存对 list集合中的数据 进行分页操作

先说 存储的结构: 

这里做了两块缓存  绿色是存储索引的缓存  黑色是存数据的缓存

翻页时需要两个参数  向上查询/或向下查询    还一个是   从第二页开始查询时需要一个索引的参数

有了这两个参数 就可以利用redis 中提供的方法进行操作

第一个是 jedis.zadd(String key, double score, String member)  这个方法 是类似于 map 的功能

第二个方法  jedis.set(String key, String value)  这个就是根据key获取对应的值

第三个方法 jedis.zrange(String key, long start, long end) 是对list中的数据 向下取值  

第四个方法 jedis.zrevrange(String key, long start, long end) 是对list中的数据 向上取值  

第五个方法是jedis.zcard(Sting key)  获取集合中的总数

下面是部分代码示例:

注意:jedis.zrange()中的元素值是从0 开始计算的

下面是将数据记录到缓存中去

 

 
  1. String KEY = "object.Id";

  2. Jedis jedis = new Jedis("127.0.0.1");

  3. // 删除记录的索引

  4. jedis.del(KEY);

  5. // keys 可以进行前匹配 如: keys("ss") 就会找出所有已ss开头的缓存

  6. Iterator<String> it = jedis.keys(KEY).iterator();

  7. while (it.hasNext()) {

  8. String key = it.next();

  9. // 清空缓存中记录的数据

  10. jedis.del(key);

  11. }

  12. // 获取数据源

  13. List<Map<String, Object>> findliveAllList = liveService.findLiveAll();

  14. if (findliveAllList != null && findliveAllList.size() > 0) {

  15. // 做索引列

  16. int i = 0;

  17. for (Map<String, Object> map : findliveAllList) {

  18. String id = map.get("id").toString();

  19. // 记录回放的排序列表

  20. jedis.zadd(KEY, i, id);

  21. // 记录单条的直播数据

  22. jedis.set(KEY + id, JSONObject.toJSON(map).toString());

  23. i++;

  24. }

  25. }

  26.  

 

 

取出数据

 

 

 
  1. String key="object.Id";

  2. Jedis jedis = new Jedis("127.0.0.1");

  3. Set<String> list = null;

  4. // redis 中的记录是从0 开始的

  5. size = size - 1;

  6. // 这个Id 是翻页时的索引 不传时从第一个开始

  7. if (id == null || "".equals(id)) {

  8. // zrange() 是向下取值

  9. list = jedis.zrange(key, 0, size);

  10. } else {

  11. // 这里加1 是因为 总元素是从0开始计算的获取的坐标就会小1

  12. long round = Math.round(jedis.zscore(key, id)) + 1;

  13. // type 1 是下一页 2 是上一页

  14. if (type != null && "1".equals(type)) {

  15. // zrange() 是向下取值 获取下一页数据

  16. list = jedis.zrange(key, round, size + round);

  17. } else {

  18. // //zrevrange() 是向上取值 获取上一页数据

  19. list = jedis.zrevrange(key, round, size + round);

  20. }

  21. }

  22. List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();

  23. for (String backId : list) {

  24. Map<String, Object> parseObject = JSON.parseObject(jedis.get(key + backId).toString(), new TypeReference<Map<String, Object>>() {

  25. });

  26. list2.add(parseObject);

  27. }

  28. map = new HashMap<String, Object>();

  29. map.put("list", list2);

  30. map.put("count", jedis.zcard(key));

 

 

这里是优化后的代码地址:

转载于:https://my.oschina.net/u/3632227/blog/2050386

你可能感兴趣的文章
ubuntu jdk安装配置
查看>>
分布式系统若干经验总结
查看>>
使用JSONP解决跨域问题-代码示例
查看>>
golang Tag
查看>>
云端时代桌面云架构介绍(CTVI)
查看>>
iptables之实例
查看>>
第三周作业
查看>>
VTDecoderXPCService意外退出
查看>>
js 数字验证
查看>>
在repeater中实现radiobutton单选
查看>>
使用Ora2Pg工具把数据从Oracle导入到PostgreSQL
查看>>
条件注释判断浏览器
查看>>
页面自动刷新代码大全
查看>>
【java基础】压缩图片上传
查看>>
Kotlin代码检查在美团的探索与实践
查看>>
Tomcat下的修改缺省项目文件夹
查看>>
网络技术
查看>>
it公司了解
查看>>
SpringCloud调研系列1:服务注册
查看>>
使用四种框架分别实现百万websocket常连接的服务器{转}
查看>>