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的偏移量,返回给前端,然后前端根据这两个值,再传过来数据,就可以完成 滚动分页了

相关推荐
喜欢的名字被抢了4 分钟前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
这个DBA有点耶25 分钟前
3000万个应用共享一套数据库:多租户“逻辑表”架构是如何做到的?
数据库·架构·dba
测试运维日常笔记44 分钟前
Oracle 数据库连接认证方式详解
数据库·oracle
ClouGence1 小时前
PostgreSQL 同步到 Iceberg:开源、私有部署与 SaaS 方案对比
数据库·postgresql·开源
这个DBA有点耶2 小时前
DBA进阶之路:从“修数据库”到“管架构债”
数据库·架构·dba
ACP广源盛139246256732 小时前
WAIC2026 国产超节点算力浪潮下@ACP#IX9104 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
珠***格3 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
盗理者3 小时前
AI Agent 技能分享|从零实现 MCP Server,让 Agent 安全读取数据库
数据库·oracle
xqqxqxxq3 小时前
Redis 五大常用数据类型 + 通用命令笔记
数据库·redis·笔记
l1t3 小时前
DeepSeek总结的在 pg_stat_statements 中诊断高基数工作负载
数据库·缓存·postgresql