redis zrange 与 zrangebyscore的区别

news/2025/2/19 15:08:53/

redis zrange 与 zrangebyscore的区别

目录

  • redis zrange 与 zrangebyscore的区别
    • 前言
    • 先说概念上的结论:
    • 实验
      • 数据准备
      • 对比案例一
      • 对比结论:
      • 对比案例二
      • 对比结论:
    • 总结

前言

想做一个在redis中获取数据时分页的功能,从网上查找到了zrange和zrangebyscore两个函数,对于这两个函数的理解,在刚刚读完官方文档后,还是不太懂:

zrange: “The order of elements is from the lowest to the highest score. Elements with the same score are ordered lexicographically.” https://redis.io/commands/zrange

zrangebyscore:“The elements are considered to be ordered from low to high scores.” https://redis.io/commands/zrangebyscore

嗯?都是依据socre排序,所以啥区别?虽说是一个索引一个score,但结果都是按照score排序,所以到底有啥区别???

刚接触的时候,光靠看定义来理解,真的很容易蒙蔽。

所以做个实验,就清楚了。

先说概念上的结论:

 两者的区别,就是一个是“索引”(zrange),一个是“score”(zrangebyscore)!【are you kidding me?!】

实验

数据准备

在redis中依次执行下列语句:

zadd test 1 firstzadd test 10 twozadd test 8 threezadd test 7 fourzadd test 2 fivezadd test 1.1 onePointOnezadd test 2 sixzadd test 8 sevenzadd test 7 sight

对比案例一

我们输入0 2两个参数来查询(具体命令使用方法请自行查阅官方文档)

用zrange
命令:

zrange test 1 2 withscores

在这里插入图片描述

结果:

在这里插入图片描述
用zrangebyscore
命令

zrangebyscore test 1 2 withscores

结果:
在这里插入图片描述

对比结论:

zrange是传入的值是索引 ,因此查询的值“1”代表是查询第二个值,也就是说,索引的情况下,索引0是第一个元素。

而zrangebyscore传入的值就是值本身的含义,也就是“score”

注:确实,官方文档就说了起始值为0的问题,但这确实是一个容易犯错误的地方。

对比案例二

我们输入0 7两个参数来查询(具体命令使用方法请自行查阅官方文档)

用zrange
命令:

zrange test 0 7 withscores

结果:
在这里插入图片描述

用zrangebyscore
命令:

zrangebyscore test 0 7 withscores

结果:
在这里插入图片描述

对比结论:

  1. 同上一个测试

  2. zrange查询的结果个数,就是索引的区间长度(如【0-7】,区间长度是8,所以查出来8个数据,当然,前提是数据不少于8个),
    而zrangebyscore由于是用socre来查询,因此,在准备的数据中,有多少个符合【0,7】区间的数据,就会返回多少数据。

注:确实,官方文档就说了起始值为0的问题,但这确实是一个容易犯错误的地方。

总结

  1. zrange的第一个数据是索引为0的数据,而zrangebyscore的第一个数据,是score值最小的那个数据

  2. zrange传入的参数是“索引”的含义,而zrangebyscore就是单纯的一个数值的含义

  3. zrange查询的结果个数<= 查询区间长度,也就是说 ,区间多长,就查询出多少个结果出来(数据不少于区间长度,足够多的情况下),而zrangebyscore的查询结果个数视实际数据而定,也就是凡是符合区间的数据,全部查询出来.

  4. 所以在分页查询的需求下,zrange可以保证每页的数据量,而zrangebyscore不能保证。

    如果有数据更新,zrange就会出现数据查询重复和遗漏的情况。而zrangebyscore却由于符合条件则全部查询出来的特性,而不会出现重复和遗漏。

不理解“重复和遗漏”是怎么发生的?自己仔细思考去吧,实在不行做个实验,你就明白了,这里我不细说。

  1. 勤于动手,丰衣足食。

http://www.ppmy.cn/news/470132.html

相关文章

K8S存储类型之configMap

1. configMap描述信息 ConfigMap功能在Kubernetes1.2版本中引入&#xff0c;许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制&#xff0c;ConfigMap可以被用来保存单个属性&#xff0c;也可以用来保存整…

产品思维-破局高手都具备的一种底层认知

产品思维的来源 在上一章节&#xff0c;简单的向大家介绍了我个人理解的 “产品思维” &#xff0c;那就是 长期有效的解决方案 的思考模式。 既然提到了 “产品思维” &#xff0c;那就不得不提一下 "产品思维的来源" &#xff0c;顾名思义&#xff0c;其实就是 产…

控制系统中Bode灵敏度积分(Bode’s Sensitivity Integral)

Bode灵敏度函数是一种用于描述控制系统稳定性和性能的频率响应函数。它通过分析系统的开环传递函数和闭环传递函数之间的差异,来评估系统对参数变化和扰动的敏感程度。 Bode灵敏度函数通常表示为单位负反馈控制系统的输出信号相对于输入信号的变化与系统参数变化之间的关系。…

【高危】Apache NiFi H2驱动存在代码注入漏洞

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具&#xff0c;DBCPConnectionPool 和 HikariCPConnectionPool 是两个控制器服务&#xff0c;用于提供对数据库的连接池管理功能。 Apache NiFi 受影响版本&#xff0c;由于 DBCPConnectionPool 和 HikariCPConnectio…

怎么学习和提升前端开发的能力? - 易智编译EaseEditing

要学习和提升前端开发的能力&#xff0c;您可以按照以下步骤进行&#xff1a; 掌握基础知识&#xff1a; 了解HTML、CSS和JavaScript的基本概念和语法。学习HTML用于创建网页结构&#xff0c;CSS用于样式设计和布局&#xff0c;JavaScript用于交互和动态效果。 学习框架和库&…

iOS提审报错Asset validation failed(90087),Asset validation failed (90125)

问题&#xff1a;iOS提审时被苹果打回&#xff0c;打回原因如下&#xff1a; Asset validation failed (90125) The binary is invalid. The encryption info in the LC_ENCRYPTION_INFO load command is either missing or invalid, or the binary is already encrypted. Thi…

风机滑环结构是什么样的

其实很多人都知道现在我国发展已经到了一种跃进的状态了&#xff0c;而在发展过程中&#xff0c;科技也在不断地改变着我国的企业&#xff0c;比如说工业企业&#xff0c;现在高速发展的科技让其生产不断地自动化&#xff0c;而自动化的实现也需要依靠各种零件&#xff0c;如风…

玻璃钢风机的性能介绍

玻璃钢风机的性能介绍   玻璃钢风机的机壳采用玻璃纤维、优良玻纤布&#xff0c;采用树脂&#xff0c;该树脂属优良树脂&#xff0c;材质优良、色泽鲜艳&#xff1b;表面胶衣&#xff0c;内含抗紫外线剂&#xff0c;耐老化、强度高、重量轻、耐腐蚀&#xff1b;在冶金、化工等…