news 2026/5/9 15:50:00

zset分页查询死循环问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
zset分页查询死循环问题

1.问题

当zset的score有较多相同值,通过ZREVRANGEBYSCORE等命令查询时,可能出现死循环,查询不完的情况。

2.解决方案

2.1 计算offset

每次查询完一页后,计算ZREVRANGEBYSCORE查询的最小值,判断和前一个值是否相等,

  1. 如果相等,继续计算,最多offset是本次的page_size,那么offset加上page_size;如果出现有重复的,可将page_size*2拉取。
  2. 如果不相等,说明分数目前没有重复,则offset默认为1,下次查询时会偏移一个返回,不会重复。

这种方式,offset越大复杂度越高,O(offset + limit)

2.2 构造唯一score

若使用时间戳作为分数,业务上同一时间戳有很多并发,那么说明该分数并不适合,可以构造唯一分数来解决:

score = 秒级ts *1e6 + count

2.3 两次查询

使用offset虽然简单,但性能可能会有所下降,可以分两次查询:

上一次查询结果:

(last_ts, last_member)

下次查询:

(ts < last_ts) OR (ts == last_ts AND member < last_member)

那么命令:

ZRANGEBYSCORE key last_ts last_ts // 查到所有分数相同的,当数量 n < page_size 时 ZREVRANGEBYSCORE key (last_ts -inf LIMIT 0 (page_size - n) // 再查询分数更小的

复杂度有点高,多了来回的网络开销。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 1:24:21

电商秒杀系统中的volatile实战:避免超卖的秘密

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个简易电商秒杀系统Demo&#xff0c;要求&#xff1a;1.使用volatile实现库存计数器 2.模拟1000并发请求 3.对比AtomicInteger方案 4.输出性能指标和正确性验证。用DeepSeek模…

作者头像 李华
网站建设 2026/5/8 14:37:20

企业级存储扩容实战:lvextend在K8s持久化存储中的应用

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Kubernetes存储扩容演示项目&#xff0c;展示如何使用lvextend命令动态扩展PVC底层存储。要求&#xff1a;1) 部署测试K8s集群 2) 创建基于LVM的StorageClass 3) 演示PVC扩…

作者头像 李华
网站建设 2026/5/1 21:35:10

编程新手必看:‘ld returned 1 exit status‘完全图解指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 设计一个面向初学者的交互式教程&#xff0c;使用可视化方式展示编译链接过程。通过动画演示&#xff1a;1).o文件如何生成 2)符号解析过程 3)链接器工作原理。然后模拟3种新手常见…

作者头像 李华
网站建设 2026/5/5 6:31:03

传统vs现代:漏洞扫描工具的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比工具&#xff0c;用于评估不同漏洞扫描方法的效率。功能包括&#xff1a;1. 对同一目标系统使用传统签名扫描和AI驱动扫描&#xff1b;2. 记录扫描时间、CPU/内存占…

作者头像 李华
网站建设 2026/5/6 4:03:13

链式投票|流向贪心

lclc797先凑总和非负&#xff0c;找唯一负数位置从近到远取两边正数补负数&#xff0c;累计移动步数得最小操作数class Solution { public:long long minMoves(vector<int>& balance) {long long total 0;int neg_idx -1;for (int i 0; i < balance.size(); i)…

作者头像 李华
网站建设 2026/5/9 11:19:38

3D角色一键绑定:AI驱动的自动骨骼生成技术深度解析

3D角色一键绑定&#xff1a;AI驱动的自动骨骼生成技术深度解析 【免费下载链接】UniRig One Model to Rig Them All: Diverse Skeleton Rigging with UniRig 项目地址: https://gitcode.com/gh_mirrors/un/UniRig 还在为复杂3D模型的骨骼绑定而头疼吗&#xff1f;传统手…

作者头像 李华