Redis基本类型学习之Sorted Set (2)

2024-08-22 16:48

本文主要是介绍Redis基本类型学习之Sorted Set (2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你必须非常努力,才能看起来毫不费力!

微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero !

前言

在上篇文章中,我们学习了Redis Sorted Set的基本概念和部分命令。这部分命令较多,预计还需要两篇文章才能学完,每篇文章在10个命令左右。对于这些命令,不需要全部记住,只需要自己动手操作过一遍,有个印象。在真正需要使用时,能够想到有这种操作,然后再去查阅命令即可。

ZINCRBY

可用版本:>= 1.2.0

时间复杂度: O(log(N)) ,N为有序数组中的元素个数

命令格式

ZINCRBY key increment member

命令描述

  • 将有序数组中member对应的score值,加上increment
  • 如果有序数组中不存在这个member元素,那么就新增这个元素,别设置score值为increment
  • 如果有序数组不存在,新建有序数组,并添加这个元素;
  • score值可以是整数值或双精度浮点数,也可以是负数,相当于减;
  • 如果key对应的数据类型不是有序数组,返回error;

返回值

字符串:member对应的新score值

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1# 加1
127.0.0.1:6379> zincrby myzset 1 one
"2"# 减2
127.0.0.1:6379> zincrby myzset -2 one
"0"# 查看分值
127.0.0.1:6379> zscore myzset one
"0"

ZRANK

可用版本:>= 2.0.0

时间复杂度: O(log(N)) ,N为有序数组中的元素个数

命令格式

ZRANK key member

命令描述

  • 按照分值从低到高的顺序,返回元素在有序数组中的排名;
  • 排名(索引)从0开始,也就是分值最低的元素排名为0

返回值

整数:如果member在有序集合中,返回排名

nil:有序数组不存在或者member不存在,返回nil

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1# 查看排名
127.0.0.1:6379> zrank myzset one
(integer) 0
127.0.0.1:6379> zrank myzset two
(integer) 1

ZREVRANK

可用版本:>= 2.0.0

时间复杂度: O(log(N)) ,N为有序数组中的元素个数

命令格式

ZREVRANK key member

命令描述

  • ZRANK相反,ZREVRANK按照分值从高到低的顺序,返回元素在有序数组中的排名;
  • 排名(索引)从0开始,分值最高的元素排名为0

返回值

整数:如果member在有序集合中,返回排名

nil:有序数组不存在或者member不存在,返回nil

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1# 查看排名
127.0.0.1:6379> zrevrank myzset one
(integer) 1
127.0.0.1:6379> zrevrank myzset two
(integer) 0

ZREM

可用版本:>= 2.0.0

时间复杂度: O(M*log(N)),N为有序数组中的元素个数,M为命令提供的元素个数

命令变化

自2.4版本后,可以删除多个元素

命令格式

ZREM key member [member ...]

命令描述

  • 从有序数组中,移除指定的元素
  • 如果元素不存在,忽略该元素
  • 如果key存在,但是对应的类型不是有序集合,返回error

返回值

整数:被移除的元素个数(不包含不存在的元素)

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three
(integer) 1# 删除两个存在的,和一个不存在的元素
127.0.0.1:6379> zrem myzset one two notexists
(integer) 2# 遍历集合
127.0.0.1:6379> zrange myzset 0 -1
1) "three"

ZREMRANGEBYRANK

可用版本:>= 2.0.0

时间复杂度: O(M+log(N)),N为有序数组中的元素个数,M为要删除的元素个数

命令格式

ZREMRANGEBYRANK key start stop

命令描述

  • 移除有序数组中,排序位于startstop之间的元素;
  • startstop为正数索引时,都是从0开始,0表示分值最小的第一个元素,1为第二个元素,以此类推;
  • 如果startstop为负数,-1表示分值最大的最后一个元素,-2表示倒数第二个元素,以此类推;

返回值

整数:被移除的元素个数

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three
(integer) 1# 移除第二个和第三个元素(索引为1 和 2)
127.0.0.1:6379> zremrangebyrank myzset 1 2
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "one"

ZREMRANGEBYSCORE

可用版本:>= 1.2.0

时间复杂度: O(M+log(N)),N为有序数组中的元素个数,M为要删除的元素个数

命令格式

ZREMRANGEBYSCORE key min max

命令描述

  • 移除有序数组中,score值介于 minmax之间的元素,默认为闭区间[min,max];
  • -inf+inf也是合法输入,表示负无穷和正无穷
  • 如果想要使用开区间,可以在minmax前加一个’(
  • 区间取值问题可以参考上一篇的 ZRANGEBYSCORE

返回值

整数:被移除的元素个数

示例

127.0.0.1:6379> zadd myzset 1 one
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 three
(integer) 1
127.0.0.1:6379> zadd myzset 4 four
(integer) 1# 删除分值[1,2]之间的元素
127.0.0.1:6379> zremrangebyscore myzset 1 2
(integer) 2# 删除负无穷到4(开区间)之间的元素
127.0.0.1:6379> zremrangebyscore myzset -inf (4
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1
1) "four"

ZREMRANGEBYLEX

可用版本:>= 2.8.9

时间复杂度: O(M+log(N)),N为有序数组中的元素个数,M为要删除的元素个数

命令格式

ZREMRANGEBYLEX key min max

命令描述

  • 当有序集合中所有元素的score值都一样时,使用字符串字典序排序,删除 minmax之间的元素
  • 此处的min、max,与上篇文章中的ZRANGEBYLEX 概念相同
  • 如果使用相同的minmaxZREMRANGEBYLEX删除的元素和ZREMRANGEBYLEX返回的元素相同

返回值

整数:被移除的元素个数

示例

127.0.0.1:6379> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
127.0.0.1:6379> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
127.0.0.1:6379> ZRANGE myzset 0 -11) "ALPHA"2) "aaaa"3) "alpha"4) "b"5) "c"6) "d"7) "e"8) "foo"9) "zap"
10) "zip"# 删除元素
127.0.0.1:6379> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6127.0.0.1:6379> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"

ZLEXCOUNT

可用版本:>= 2.8.9

时间复杂度: O(log(N)),N为有序数组中的元素个数

命令格式

ZLEXCOUNT key min max

命令描述

  • 当有序集合中所有元素的score值都一样时,返回字符串字典序排序后 minmax之间的元素
  • 此处的min、max,与上篇文章中的ZRANGEBYLEX 概念相同

返回值

整数:字典序范围内的元素个数

示例

127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2# 全部区间
127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7# [b,f]区间
127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5

ZPOPMAX

可用版本:>= 5.0.0

时间复杂度: O(log(N)*M),N为有序数组中的元素个数,M为弹出的元素个数

命令格式

ZPOPMAX key [count]

命令描述

  • 移除并返回前countscore较高的元素
  • 如果不指定count值,默认为1
  • 如果count超过集合长度,不会报错
  • 返回结果中,分值最大的元素在第一个,同时会带有分值

返回值

列表:元素列表及其分值

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two"
(integer) 1
127.0.0.1:6379> ZADD myzset 3 "three"
(integer) 1# 默认返回1个
127.0.0.1:6379> ZPOPMAX myzset
1) "three"
2) "3"# 超过列表长度时,返回所有元素
127.0.0.1:6379> ZPOPMAX myzset 3
1) "two"
2) "2"
3) "one"
4) "1"

ZPOPMIN

可用版本:>= 5.0.0

时间复杂度: O(log(N)*M),N为有序数组中的元素个数,M为弹出的元素个数

命令格式

ZPOPMIN key [count]

命令描述

  • 移除并返回前countscore的元素
  • 如果不指定count值,默认为1
  • 如果count超过集合长度,不会报错
  • 返回结果中,分值最小的元素在第一个,同时会带有分值

返回值

列表:元素列表及其分值

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two"
(integer) 1
127.0.0.1:6379> ZADD myzset 3 "three"
(integer) 1# 默认返回1个
127.0.0.1:6379> zpopmin myzset
1) "one"
2) "1"# 超过列表长度时,返回所有元素
127.0.0.1:6379> zpopmin myzset 3
1) "two"
2) "2"
3) "three"
4) "3"

ZMSCORE

可用版本:>= 6.2.0

时间复杂度: O(N),N为命令提供的元素个数

命令格式

ZMSCORE key member [member ...]

命令描述

  • 返回多个元素对应的分值
  • 如果该元素在有序数组中不存在,返回nil

返回值

数组:提供的所有元素对应的分值列表

示例

127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myzset 2 "two"
(integer) 1
127.0.0.1:6379> ZMSCORE myzset "one" "two" "nofield"
1) "1"
2) "2"
3) (nil)

总结

本文介绍了有序集合中的部分相关命令,包括

  • ZINCRBY:元素score加上一个值
  • ZRANK、ZREVRANK:获取元素在有序数组中的排名
  • ZREM:删除元素
  • ZREMRANGEBYRANK、ZREMRANGEBYSCORE、ZREMRANGEBYLEX:删除给定区间的元素
  • ZLEXCOUNT:返回指定字典序内的元素个数
  • ZPOPMAX、ZPOPMIN:移除首/尾前count个元素
  • ZMSCORE:返回多个元素的分值

更多

个人博客: https://lifelmy.github.io/

微信公众号:漫漫Coding路

这篇关于Redis基本类型学习之Sorted Set (2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096843

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

一文详解Java Stream的sorted自定义排序

《一文详解JavaStream的sorted自定义排序》Javastream中的sorted方法是用于对流中的元素进行排序的方法,它可以接受一个comparator参数,用于指定排序规则,sorte... 目录一、sorted 操作的基础原理二、自定义排序的实现方式1. Comparator 接口的 Lam

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模