当前位置: 首页 > article >正文

redis的zset实现下滑滚动分页查询思路

常规zset查询

我们redis的数据为

我们知道 我们常规查询的话  我们假如 zset 表中 有7个元素,然后我们进行分页查询的话,我们一次查3个元素,然后查出来元素 和元素的分数

我们redis的语法应该这样写  

zrevrangebyscore wang  1000 0 withscores limit 0 3 

这句话的意思是  我们根据score的分数 从大到小开始查询  查询的是 小于等于1000 大于0 的score 和他的member,从0开始查,也就是从1000开始查,差三个元素  ,这时候我们redis得到的数据应该为

但是 我们下一页数据应该从那里查呢,我们下一页数据应该从 上一页数据的最小值开始查,并且跳过  上一页的最小数据

 redis语法为

 zrevrangebyscore wang  5 0  withscores limit 1 3

数据查询为

问题解析

这时候发现了 好像出现了个bug,我们并不想查到5 这个分数的数据,结果却查到分数为5的m5的数据,这是为什么呢,因为我们只跳过了一个,但是分数为5的数据有两个,这就造成了数据查询的不一致,这时候我们怎么办

问题解决

我们只需要统计出上一次查询的分数最小值的个数就可以了,然后跳过这个个数 

就比如 我们上次分数最小值为5,然后分数为5的有两个,我们跳过这两个就行

 所以我们只需要关注 两个数据,这个max 也就是 最大值,和offset 偏移量就可以了,

代码思路实现

我们思路就是  把时间戳作为socre 传过来,然后第一次查询的时候 用的是当前时间的时间戳,offset为0,然后我们查询出来并且统计第一次查询的 score的最小值,和offset的偏移量,返回给前端,然后前端根据这两个值,再传过来数据,就可以完成 滚动分页了


http://www.kler.cn/news/357729.html

相关文章:

  • SQL Injection | SQL 注入 —— 加解密注入
  • Educational Codeforces Round 80 D. Minimax Problem(二分,状态压缩)
  • Java程序设计:spring boot(2)
  • 海康威视被曝裁员千人
  • PyTorch深度学习入门汇总
  • ufw 工具介绍
  • SpringBoot之RedisTemplate基本配置
  • 86.【C语言】数据结构之链表的总体概述
  • 【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程
  • XML 编辑器:功能、选择与使用技巧
  • kubernetes之Helm包管理器
  • 基于springboot的画师约稿系统的设计与实现
  • mysql 的存储引擎各自的优缺点
  • 01_MVCC(多版本并发机制)
  • Leetcode 3327. Check if DFS Strings Are Palindromes
  • 2024.09.28校招 实习 内推 面经
  • Spring Boot优化大创项目风险评估流程
  • HarmonyOS 开发知识总结
  • Discuz | 起尔开发 传奇开服表游戏公益服发布论坛网站插件
  • 记一次 Flink mongoDB CDC 到Kafka遇到的问题