开发手记: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 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步