先说 存储的结构:

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

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

有了这两个参数 就可以利用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 开始计算的

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

     String KEY = "object.Id";Jedis jedis = new Jedis("127.0.0.1");// 删除记录的索引jedis.del(KEY);// keys 可以进行前匹配 如: keys("ss") 就会找出所有已ss开头的缓存Iterator<String> it = jedis.keys(KEY).iterator();while (it.hasNext()) {String key = it.next();// 清空缓存中记录的数据jedis.del(key);}// 获取数据源List<Map<String, Object>> findliveAllList = liveService.findLiveAll();if (findliveAllList != null && findliveAllList.size() > 0) {// 做索引列int i = 0;for (Map<String, Object> map : findliveAllList) {String id = map.get("id").toString();// 记录回放的排序列表jedis.zadd(KEY, i, id);// 记录单条的直播数据jedis.set(KEY + id, JSONObject.toJSON(map).toString());i++;}}

取出数据

     String key="object.Id";Jedis jedis = new Jedis("127.0.0.1");Set<String> list = null;// redis 中的记录是从0 开始的size = size - 1;// 这个Id 是翻页时的索引 不传时从第一个开始if (id == null || "".equals(id)) {// zrange() 是向下取值list = jedis.zrange(key, 0, size);} else {// 这里加1 是因为 总元素是从0开始计算的获取的坐标就会小1long round = Math.round(jedis.zscore(key, id)) + 1;// type 1 是下一页 2 是上一页if (type != null && "1".equals(type)) {// zrange() 是向下取值 获取下一页数据list = jedis.zrange(key, round, size + round);} else {// //zrevrange() 是向上取值 获取上一页数据list = jedis.zrevrange(key, round, size + round);}}List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();for (String backId : list) {Map<String, Object> parseObject = JSON.parseObject(jedis.get(key + backId).toString(), new TypeReference<Map<String, Object>>() {});list2.add(parseObject);}map = new HashMap<String, Object>();map.put("list", list2);map.put("count", jedis.zcard(key));

这里是优化后的代码地址:http://blog.csdn.net/qq_27292113/article/details/54645899

利用redis缓存对 list集合中的数据 进行分页操作(一)相关推荐

  1. java redis缓存理解_Java项目中使用Redis缓存案例

    缓存的目的是为了提高系统的性能,缓存中的数据主要有两种: 1.热点数据.我们将经常访问到的数据放在缓存中,降低数据库I/O,同时因为缓存的数据的高速查询,加快整个系统的响应速度,也在一定程度上提高并发 ...

  2. java List最大_在java中获取List集合中最大的日期时间操作

    取list集合中最大的日期, 可以用date max = collections.max(datelist);, 传入一个日期集合, 就可以获取, 工作中有这个需求, 就查找到这个, 代码如下 } e ...

  3. (八)webStorage使用实例——利用storage事件实时监视webStorage中的数据

    在HTML5中,可以通过window对象的storage事件进行监听并指定其事件处理函数的方法来定义当其在其他页面中修改sessionStorage或localStorage中的值时所要执行的处理,代 ...

  4. 使用Properties集合存储数据,遍历取出Properties集合中的数据

    package com.learn.demo07.Prop;import java.io.FileOutputStream; import java.io.FileReader; import jav ...

  5. 使用Stream流的方式,遍历集合,对集合中的数据进行过滤

    Stream的更优写法 下面来看一下借助Java 8的Stream API,什么才叫优雅: package com.learn.demo01.Stream;import java.util.Array ...

  6. 使用传统的方式,遍历集合,对集合中的数据进行过滤

    循环遍历的弊端 Java 8的Lambda让我们可以更加专注于做什么(What),而不是怎么做(How),这点此前已经结合内部类进行 了对比说明.现在,我们仔细体会一下上例代码,可以发现: for循环 ...

  7. php怎么插入数据,利用PHP怎么向MySQL数据库中插入数据

    利用PHP怎么向MySQL数据库中插入数据 发布时间:2020-12-11 16:41:47 来源:亿速云 阅读:89 作者:Leah 这篇文章给大家介绍利用PHP怎么向MySQL数据库中插入数据,内 ...

  8. 集合中的数据存入到文件中,文件中的数据读取到集合中

    * Map<String ,Integer> map = new LinkedHashMap<>(); * map.put("摩卡",30); * map. ...

  9. 突然挂了!Redis缓存都在内存中,这下完了!

    我是Redis,一个叫Antirez的男人把我带到了这个世界上. "快醒醒!快醒醒!",隐隐约约,我听到有人在叫我. 慢慢睁开眼睛,原来旁边是MySQL大哥. "我怎么睡 ...

最新文章

  1. python魔术方法call_php魔术方法__call
  2. 聊聊 iOS 中的网络加密
  3. 无线网***工具进攻方法及防范技巧
  4. MyBatis-12MyBatis动态SQL之【choose when otherwise】
  5. php将换行变为 p 标签,editplus 将文本换行替换为p标签
  6. 谈谈重要的TCP、UDP
  7. 玫瑰花函数matlab,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神...
  8. TCP Congestion Control
  9. 相机下载_索尼黑卡相机与手机互联APP相关
  10. 漫步微积分十七——最大最小值问题(续)
  11. 通过kubeadm安装kubernetes 1.13.2
  12. [BZOJ2339][HNOI2011]卡农
  13. 什么是闭包?如何理解及使用闭包?
  14. Asp.Net母版页元素ID不一致的体现
  15. 利用云主机搭建游戏加速器(仅限国内加速)
  16. 点微同城系统整站源码 带pc端与小程序端+49款插件
  17. linux系统fasta程序,求助:如何用命令对fasta格式的序列按长短排序
  18. 常见问题汇总:FLUENT面数据处理
  19. 关于alert(12)与alert(1||2)输出问题解析
  20. c++实现两有序链表合并成一个新的有序链表

热门文章

  1. Linux 6.2 最新合并情况:拓展 ArmSoc 支持,华为代码加速核心功能 715 倍!
  2. 【web前端】移动端控制台插件,手机端页面查看相关页面控制台信息
  3. QQ群推广的13杀招
  4. iOS开发:音乐播放器
  5. 为什么是List list=new ArrayList();?
  6. JAVA 时间戳与Date类型的相互转换、格式化日期、字符串日期转Date
  7. STM32F10x系列GPIO寄存器BRR、BSRR、ODR、IDR的使用理解
  8. textcnn文本词向量_基于Text-CNN模型的中文文本分类实战
  9. css如何定义img的src
  10. python round_Python3 round() 函数