2023-05-19 17:15阅读: 315评论: 0推荐: 0

开发手记:Redis中zset查询的range

问题描述

从Redis中查询关注列表(使用zset存储),但是查询到的记录总是比应有的记录数少一个

Set<Integer> targetIds = redisTemplate.opsForZSet().reverseRange(key, offset, offset + limit - 1);

调试

于是去检查Redis中置顶键zset中的所有数据,发现自己对zset相关命令似乎并不太熟悉,于是笔记恶补一波Redis中zset的常用命令
数据是对的,也就是说确实是少查了一条出来

ZRANGE follower:3:11 0 -1

-1表示查询所有

解决

发现是偏移量的问题,一般使用的offset从1开始,像这样

ZRANGE follower:3:11 1 100

但是其实应该是从0开始

ZRANGE follower:3:11 0 100

反思总结

之前一直以为offset是从1开始编号的,自己也是一直这么做的,但是跟ChatGPT确认后才发现原来自己一直都是错的,无论是MySQL还是Redis都应该从0开始编号
属于低级错误

稍微复习了下SQL,发现自己有更多的低级错误和很差的基础知识,这里记下,引以为戒
首先offset关键字和limit关键字是有顺序要求的,limit在前offset在后

SELECT * FROM `bookinfo` OFFSET 0 limit 1 # 这样写是错误的
SELECT * FROM `bookinfo` limit 1 OFFSET 0 # 正确写法

同时还有替代写法,第一个参数是offset,第二个参数是limit

SELECT * FROM `bookinfo` limit 0,2

另外还有很重要的一点,SQL中原生的offset是行偏移而不是页偏移,页便宜应该是分页插件提供的功能,和这里的不是同一个偏移概念

SELECT * FROM `bookinfo` limit 1,5 # 返回第2~6条数据

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17415696.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(315)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起