【Redis7】10大数据类型之Zset类型

2024-05-08 16:44

本文主要是介绍【Redis7】10大数据类型之Zset类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.Zset类型
  • 2.常用命令
  • 3.示例
    • 3.1 ZADD,ZRANGE和ZREVRANGE
    • 3.2 ZSCORE,ZCARD和ZREM
    • 3.3 ZRANGEBYSCORE和ZCOUNT
    • 3.4 ZRANK和ZREVRANK
    • 3.5 Redis7新命令ZMPOP

1.Zset类型

Redis的Zset(Sorted Set,有序集合)是一种特殊的数据结构,它结合了集合(Set)和排序功能。在Zset中,每个成员(member)都关联一个唯一的分数(score),这个分数用于对集合中的成员进行排序。因此,Zset中的元素不仅像Set那样不允许重复,还能够根据score的值进行排序。

特性:

  • 有序性:Zset中的元素可以根据score的值进行升序或降序排列。
  • 唯一性:每个成员在Zset中都是唯一的,就像Set一样。
  • 分数(score):可以是任意浮点数,用于排序。相同的score值的成员会按照成员自身的字典顺序排序。
  • 时间复杂度:对于添加、删除和查找操作,平均时间复杂度通常为O(1),具体取决于跳跃列表(skiplist)的实现细节。
  • 跳跃列表(Skiplist):Redis使用跳跃列表作为Zset的底层实现,这是一种可以在对数时间内完成查找、插入和删除操作的数据结构。
  • 范围操作:支持快速地执行范围查询,如获取某个分数区间内的成员。

2.常用命令

  • ZADD key score member [score member ...]:向Zset中添加一个或多个成员及其分数。
  • ZRANGE key start stop [WITHSCORES]:返回Zset中指定范围内的成员,可选地包括它们的分数。
  • ZREVRANGE key start stop [WITHSCORES]:同ZRANGE,但返回的是按score降序排列的结果。
  • ZREM key member [member ...]:移除Zset中的一个或多个成员。
  • ZCARD key:返回Zset中成员的数量。
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:根据分数范围返回成员。
  • ZCOUNT key min max:返回Zset中score值在给定范围内的成员数量。
  • ZRANK key member:获取下标值
  • ZRANKANK key member:逆序获取下标值
  • ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]:从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对

3.示例

3.1 ZADD,ZRANGE和ZREVRANGE

  • ZADD key score member [score member ...]:向Zset中添加一个或多个成员及其分数。
  • ZRANGE key start stop [WITHSCORES]:返回Zset中指定范围内的成员,可选地包括它们的分数。
  • ZREVRANGE key start stop [WITHSCORES]:同ZRANGE,但返回的是按score降序排列的结果。
127.0.0.1:6379> zadd zset1 10 v1 22.2 v2 30 v3 # 可以是浮点数
(integer) 3
127.0.0.1:6379> zrange zset1 0 -1
1) "v1"
2) "v2"
3) "v3"# 从大到小
127.0.0.1:6379> zrange zset1 0 -1 withscores # 从小到大
1) "v1"
2) "10"
3) "v2"
4) "22.199999999999999"
5) "v3"
6) "30"
127.0.0.1:6379> zrevrange zset1 0 -1 withscores # 从大到小
1) "v3"
2) "30"
3) "v2"
4) "22.199999999999999"
5) "v1"
6) "10"
127.0.0.1:6379> 

3.2 ZSCORE,ZCARD和ZREM

  • ZSCORE key member:用于获取有序集合中某个成员的分数(score)值。

  • ZREM key member [member ...]:移除Zset中的一个或多个成员。

  • ZCARD key:返回Zset中成员的数量。

127.0.0.1:6379> zcard zset1
(integer) 3
127.0.0.1:6379> zscore zset1 v1 
"10"
127.0.0.1:6379> zrem zset1 v1
(integer) 1
127.0.0.1:6379> zcard zset1
(integer) 2
127.0.0.1:6379> zrem zset1 v2 v3
(integer) 2
127.0.0.1:6379> zcard zset1
(integer) 0
127.0.0.1:6379> 

3.3 ZRANGEBYSCORE和ZCOUNT

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]:根据分数范围返回成员。

ZCOUNT key min max:返回Zset中score值在给定范围内的成员数量。

127.0.0.1:6379> zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5
(integer) 5
127.0.0.1:6379> zrangebyscore zset1 20 40 # 不带分数
1) "v2"
2) "v3"
3) "v4"
127.0.0.1:6379> zrangebyscore zset1 20 40 withscores # 带分数
1) "v2"
2) "20"
3) "v3"
4) "30"
5) "v4"
6) "40"
127.0.0.1:6379> zrangebyscore zset1 (20 40 withscores # ( 的意思是不包含,可以理解为开区间,默认是闭区间
1) "v3"
2) "30"
3) "v4"
4) "40"
127.0.0.1:6379> zrangebyscore zset1 20 (40 withscores
1) "v2"
2) "20"
3) "v3"
4) "30"
127.0.0.1:6379> zrangebyscore zset1 20 40 withscores limit 0 2 # 从第几个结果返回几个数据
1) "v2"
2) "20"
3) "v3"
4) "30"
127.0.0.1:6379> zcount zset1 10 50 
(integer) 5
127.0.0.1:6379> zcount zset1 (10 50 
(integer) 4
127.0.0.1:6379> 

3.4 ZRANK和ZREVRANK

  • ZRANK key member:获取下标值
  • ZRANKANK key member:逆序获取下标值
127.0.0.1:6379> zadd zset1 10 v1 20 v2 30 v3 40 v4 50 v5
(integer) 5
127.0.0.1:6379> zrank zset1 v3
(integer) 2
127.0.0.1:6379> zrank zset1 v1
(integer) 0
127.0.0.1:6379> zrevrank zset1 v1
(integer) 4
127.0.0.1:6379> 

3.5 Redis7新命令ZMPOP

image-20240508155213579

ZMPOP numkeys key [key ...] MIN|MAX [COUNT count]:从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员分数对

示例:

  • 从1个zset列表中弹出一个最小的
  • 从1个zset列表中弹出两个最大的
127.0.0.1:6379> ZMPOP 1 zset1 min count 1 # 从1个zset列表中弹出一个最小的
1) "zset1"
2) 1) 1) "v1"2) "10"
127.0.0.1:6379> ZMPOP 1 zset1 max count 2 # 从1个zset列表中弹出两个最大的
1) "zset1"
2) 1) 1) "v5"2) "50"2) 1) "v4"2) "40"
127.0.0.1:6379> 

这篇关于【Redis7】10大数据类型之Zset类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

MySQL 索引简介及常见的索引类型有哪些

《MySQL索引简介及常见的索引类型有哪些》MySQL索引是加速数据检索的特殊结构,用于存储列值与位置信息,常见的索引类型包括:主键索引、唯一索引、普通索引、复合索引、全文索引和空间索引等,本文介绍... 目录什么是 mysql 的索引?常见的索引类型有哪些?总结性回答详细解释1. MySQL 索引的概念2

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取