Redis入门到通关之ZSet命令

news2024/11/23 13:09:50

文章目录

  • ⛄概述
  • ⛄常见命令有
  • ⛄RedisTemplate API
    • ❄️❄️ 向集合中插入元素,并设置分数
    • ❄️❄️向集合中插入多个元素,并设置分数
    • ❄️❄️按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部
    • ❄️❄️获得指定元素的分数
    • ❄️❄️返回集合内的成员个数
    • ❄️❄️返回集合内指定分数范围的成员个数(Double类型)
    • ❄️❄️返回集合内元素在指定分数范围内的排名(从小到大)
    • ❄️❄️带偏移量和个数,(key,起始分数,最大分数,偏移量,个数)
    • ❄️❄️返回集合内元素的排名,以及分数(从小到大)
    • ❄️❄️返回指定成员的排名
    • ❄️❄️从集合中删除指定元素
    • ❄️❄️删除指定索引范围的元素(Long类型)
    • ❄️❄️删除指定分数范围内的元素(Double类型)
    • ❄️❄️为指定元素加分(Double类型)
  • ⛄应用场景


在这里插入图片描述

r>


⛄概述

RedisSortedSet 是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)hash表

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet 的可排序特性,经常被用来实现排行榜这样的功能。


⛄常见命令有

  • ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
  • ZREM key member:删除sorted set中的一个指定元素
  • ZSCORE key member : 获取sorted set中的指定元素的score值
  • ZRANK key member:获取sorted set 中的指定元素的排名
  • ZCARD key:获取sorted set中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF.ZINTER.ZUNION:求差集.交集.并集

注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可,例如:

  • 升序获取sorted set 中的指定元素的排名:ZRANK key member
  • 降序获取sorted set 中的指定元素的排名:ZREVRANK key memeber

⛄RedisTemplate API

❄️❄️ 向集合中插入元素,并设置分数

//1、通过redisTemplate设置值
redisTemplate.boundZSetOps("zSetKey").add("zSetVaule", 100D);

//2、通过BoundValueOperations设置值
BoundZSetOperations zSetKey = redisTemplate.boundZSetOps("zSetKey");
zSetKey.add("zSetVaule", 100D);

//3、通过ValueOperations设置值
ZSetOperations zSetOps = redisTemplate.opsForZSet();
zSetOps.add("zSetKey", "zSetVaule", 100D);

❄️❄️向集合中插入多个元素,并设置分数

DefaultTypedTuple<String> p1 = new DefaultTypedTuple<>("zSetVaule1", 2.1D);
DefaultTypedTuple<String> p2 = new DefaultTypedTuple<>("zSetVaule2", 3.3D);
redisTemplate.boundZSetOps("zSetKey").add(new HashSet<>(Arrays.asList(p1,p2)));

❄️❄️按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部

Set<String> range = redisTemplate.boundZSetOps("zSetKey").range(0, -1);

❄️❄️获得指定元素的分数

Double score = redisTemplate.boundZSetOps("zSetKey").score("zSetVaule");

❄️❄️返回集合内的成员个数

Long size = redisTemplate.boundZSetOps("zSetKey").size();

❄️❄️返回集合内指定分数范围的成员个数(Double类型)

Long COUNT = redisTemplate.boundZSetOps("zSetKey").count(0D, 2.2D);

❄️❄️返回集合内元素在指定分数范围内的排名(从小到大)

Set byScore = redisTemplate.boundZSetOps("zSetKey").rangeByScore(0D, 2.2D);

❄️❄️带偏移量和个数,(key,起始分数,最大分数,偏移量,个数)

Set<String> ranking2 = redisTemplate.opsForZSet().rangeByScore("zSetKey", 0D, 2.2D 1, 3);

❄️❄️返回集合内元素的排名,以及分数(从小到大)

Set<TypedTuple<String>> tuples = redisTemplate.boundZSetOps("zSetKey").rangeWithScores(0L, 3L);
  for (TypedTuple<String> tuple : tuples) {
      System.out.println(tuple.getValue() + " : " + tuple.getScore());
  }ss

❄️❄️返回指定成员的排名

//从小到大
Long startRank = redisTemplate.boundZSetOps("zSetKey").rank("zSetVaule");
//从大到小
Long endRank = redisTemplate.boundZSetOps("zSetKey").reverseRank("zSetVaule");

❄️❄️从集合中删除指定元素

redisTemplate.boundZSetOps("zSetKey").remove("zSetVaule");

❄️❄️删除指定索引范围的元素(Long类型)

redisTemplate.boundZSetOps("zSetKey").removeRange(0L,3L);

❄️❄️删除指定分数范围内的元素(Double类型)

redisTemplate.boundZSetOps("zSetKey").removeRangeByScorssse(0D,2.2D);

❄️❄️为指定元素加分(Double类型)

Double score = redisTemplate.boundZSetOps("zSetKey").incrementScore("zSetVaule",1.1D);

⛄应用场景

  • 排行榜(Leaderboard): Sorted Set 是实现排行榜的理想选择。你可以将用户的分数作为元素的分数,用户的 ID(或者其他唯一标识符)作为元素的值,然后根据分数的高低来进行排名。

  • 时间序列数据存储(Time Series Data): 如果你需要存储时间序列数据,并且需要按照时间顺序检索数据,Sorted Set 可以胜任这项任务。你可以将时间戳作为元素的分数,数据项作为元素的值,这样就可以按照时间顺序检索数据。

  • 范围查询(Range Queries): 由于 Sorted Set 中的元素是按照分数有序排列的,你可以很容易地执行范围查询操作,比如获取分数在某个范围内的所有元素。

  • 计数器(Counter): 类似于 Set,Sorted Set 也可以用作计数器。每次对某个元素的分数进行增加或减少,就相当于对计数器进行了加一或减一的操作。

  • 任务调度(Task Scheduling): 可以使用 Sorted Set 来实现简单的任务调度系统。将任务的执行时间作为元素的分数,任务的唯一标识符作为元素的值,然后根据执行时间的顺序来提取要执行的任务。

  • 范围查找(Range Retrieval): 类似于范围查询,但是这里更加注重于按照分数的范围查找元素。这在某些场景下可以帮助你快速定位需要处理的数据。

  • 活跃用户列表(Active Users List): 使用 Sorted Set 来存储活跃用户的 ID,可以根据用户的活跃度(比如登录时间、活跃次数等)作为分数,然后根据活跃度来获取活跃用户列表。



在这里插入图片描述



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1597822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6. Django 深入模板

6. 深入模板 6.1 Django模板引擎 Django内置的模板引擎包含模板上下文(亦可称为模板变量), 标签和过滤器, 各个功能说明如下: ● 模板上下文是以变量的形式写入模板文件里面, 变量值由视图函数或视图类传递所得. ● 标签是对模板上下文进行控制输出, 比如模板上下文的判断和循…

SpringCloud之LoadBalancer负载均衡器的简单使用

SpringCloud之LoadBalancer负载均衡器的简单使用 loadbalancer用于对提供服务的集群做一个节点的选取规则。 如图所示&#xff0c;load balancer集成在调用方 示例 创建loadbalance-base模块,并引入相关依赖 <dependencies><dependency><groupId>org.spr…

SVN泄露(ctfhub)

目录 下载安装dvcs-ripper 使用SVN 一、什么是SVN&#xff1f; 使用SVN能做什么&#xff1f; 二、SVN泄露&#xff08;ctfhub&#xff09; SVN源代码漏洞的主要原因&#xff1a; 工具准备&#xff1a;dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇&#xff08;内…

GPT的使用

个人笔记&#xff08;整理不易&#xff0c;有帮助点个赞&#xff09; 笔记目录&#xff1a;学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 个人随笔&#xff1a;工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客 网站sms-activate.or…

Qt配置外部库(Windows平台)

这里以C的外部库nlopt为例子来示范&#xff0c;右键工程选择添加库&#xff0c;然后选择库文件的目录&#xff08;dll.a&#xff09;&#xff0c;会自动设置好包含路径&#xff08;一般是include的目录&#xff09;&#xff0c;添加库&#xff08;最下面一行&#xff09; &…

【Linux项目自动化构建工具-make/Makefile】

目录 背景快速查看项目清理原理 依赖关系原理 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c…

MXXE利用XXE漏洞快速获取服务器敏感文件工具

https://github.com/MartinxMax/MXXE 关于 MXXEV1.2升级版,快速获取服务器敏感文件 获取Windows服务器敏感文件 把数据包复制到payload.txt进行自动注入 $ python3 MXXE.py -lh 10.10.16.5 -user Daniel -server windows 幸运的是我们找到了服务器的私匙 获取Linux服务器敏感…

Eigen笔记2:矩阵拼接

直接贴代码吧&#xff0c;使用的MatrixXd 和<<运算符&#xff1a; int main(int argc, char *argv[]) {Eigen::MatrixXd B(2, 2);B << 1, 2,3, 4;Eigen::MatrixXd C(2, 2);C << 5, 6,7, 8;Eigen::MatrixXd D(2, 2);D << 9, 10,11, 12;Eigen::MatrixXd…

光电传感器的工作原理简介

光电传感器是一种利用光电效应将光信号转换为电信号的传感器。 工作原理 光照射&#xff1a;光电传感器通过光源&#xff08;如LED或激光&#xff09;照射在其表面。 光电转换&#xff1a;光线与传感器材料发生光电反应&#xff0c;产生电信号。这种转换过程涉及到光子与电子的…

基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 VIVADO2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Design Name: // …

PMAlign模板匹配工具

PMAlign模板匹配工具 PMAlign工具介绍: PMAlign 编辑控件为 CogPMAlignTool,及其组件提供图形用户界面&#xff0c;此工具可用于训练模板&#xff0c;然后使用在连续的输入图像中搜索模板。可指定执行模板训练或模板搜索时要使用的 算法类型&#xff0c;并可选择利用图像还是…

Java怎么获取今天最早的时间

今天在实现项目里的一个功能的时候&#xff0c;需要获取今天最早的时间&#xff0c;比如今天是2024-4-15&#xff0c;则今天的开始时间为2024-4-14日24点之后&#xff08;2024-4-15零点&#xff09;的那个时间点。 这篇文章就分享一下博主获取这个时间的方法&#xff1a; 很简…

github上的软件许可证是什么?如何合并本地的分支德语难学还是俄语更加难学?站在一个中国人的立场上,德语难学还是俄语更加难学?俄语跟德语有什么样的显著差别?

目录 github上的软件许可证是什么&#xff1f; 如何合并本地的分支 德语难学还是俄语更加难学&#xff1f; 站在一个中国人的立场上&#xff0c;德语难学还是俄语更加难学&#xff1f; 俄语跟德语有什么样的显著差别&#xff1f; github上的软件许可证是什么&#xff1f; …

【软考】设计模式之命令模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 优缺点5.1 优点5.2 缺点 6. 适用性7.java示例 1. 说明 1.命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式。2.属于行为型模式。3.请求以命令的形式被封装在对象中&#xff0c;并传递给调用对象。4.调用对…

华为ensp中nat server 公网访问内网服务器

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月15日17点30分 NAT服务器是一种在网络边界设备上配置的服务&#xff0c;它允许外部网络的用户访问内部网络中的服务或主机&#xff0c;同时隐藏了内部网络的真实IP地…

操作系统(1)计算机存储结构

文章目录 一、计算机存储结构1、基本概念2、计算机存储结构的组成部分3、局部性原理4、高速缓存4.1、基本概念4.2、工作原理4.3、层次结构4.4、对系统性能的影响4.5、一致性问题 5、寄存器5.1&#xff0c;种类5.2&#xff0c;特点5.3、作用5.4、寄存器与缓存的差异 前言 计算机…

# RAG | Langchain # Langchain RAG:打造Markdown文件的结构化分割解决方案

【文章简介】 在信息技术的现代背景下&#xff0c;高效地处理和分析文本数据对于知识获取和决策支持至关重要。Markdown文件因其易读性和高效性&#xff0c;在文档编写和知识共享中占据了重要地位。然而&#xff0c;传统的文本处理方法往往忽视了Markdown的结构化特性&#xff…

数据结构与算法——23.哈希冲突及其解决方法

这篇文章我们主要讲一下哈希冲突及其解决方法。 目录 1.哈希冲突的介绍 2.解决哈希冲突的方法 2.1 开放地址法 2.1.1 线性探测法 2.1.2 平方探测法&#xff08;二次探测法&#xff09; 2.2再哈希法 2.3链地址法 2.4建立公共溢出区 3.总结 1.哈希冲突的介绍 首先&…

dcoker+nginx解决前端本地开发跨域

步骤 docker 拉取nginx镜像跑容器 并配置数据卷nginx.conf nginx.conf文件配置 这里展示server server {listen 80;listen [::]:80;server_name localhost;#access_log /var/log/nginx/host.access.log main;location / {# 当我们访问127.0.0.1:8028就会跳转到ht…

【JavaWeb】Day45.Mybatis——入门程序

什么是MyBatis? MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 &#xff08;持久层&#xff1a;指的是就是数据访问层(dao)&#xff0c;是用来操作数据库的。&#xff09; &#xff08;框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用…