首页 > 数据库 >redis中的zset数据类型的基本操作

redis中的zset数据类型的基本操作

时间:2022-10-09 15:45:54浏览次数:72  
标签:分数 ball 数据类型 成员 redis 语法 k1 key 基本操作

1、首先连上你的redis

以下一些命令很简单,或者执行命令后效果也无法体现的就没有进行截图展示

2、zset相关操作
说明:redis的zset是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。集合中最大的成员数为2^32-1(4294967295,每个集合可以存储40多亿个成员)。


-------------------增、删、改、查操作开始------------------

Sorted Set命令一览:

1、ZADD
向有序集合中添加一个或多个成员:zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]

  • [NX|XX]:NX=Not exist,当成员不存在时,才进行添加,不会进行更新已经存在的成员。XX=already exist。仅仅进行更新已存在的成员,不会新增新的成员
  • [GT|LT]:选项要求Redis版本要 >= 6.2。
    GT:greater than,表示新分数大于当前分数时才更新元素分值,但是该参数并不会影响新增成员。
    LT:less than,表示新分数小于当前分数时才更新元素分值,同样,该参数并不会影响新增成员。
  • [CH]:在默认情况下,ZADD命令将返回成功添加的新成员数据作为返回值,而CH参数则表示会返回被修改成员的数量作为返回值,被修改成员包括新添加的成员以及分值被更新的成员。
  • [INCR]:zadd 指令不再是设置,而是增加分数。此参数可用另一个命令代替:ZINCRBY(给key中一个成员添加分数)

实践:zadd ball 300 basketball 400 football 200 volleyball 100 tennisball

[NX|XX]实践:zadd ball nx 80 tennisball 60 ping-pong-ball
说明:tennisball(网球)并没有被修改,而ping-pong-ball被加入到集合中

[NX|XX]实践:zadd ball xx 80 tennisball 50 baseball
说明:baseball(棒球)并没有被加入到集合中,而tennisball(网球)的分数被修改了。此时命令返回值为0,因为默认情况下,ZADD命令将返回成功添加的新成员数据作为返回值。

[GT|LT]实践:zadd ball gt 50 baseball 70 tennisball
说明:因为tennisball的70不大于原本的80,所以并不进行更新,但是新增的baseball不受影响,如期加入了集合中。

[GT|LT]实践:zadd ball lt 60 baseball 40 snooker
说明:因为baseball的60不小于原本的50,所以并不进行更新,但是新增的snooker(斯诺克)不受影响,如期加入了集合中。

[GT|LT]实践:zadd ball lt 60 baseball 40 snooker
说明:因为baseball的60不小于原本的50,所以并不进行更新,但是新增的snooker(斯诺克)不受影响,如期加入了集合中。

[incr]实践:zadd ball incr 10 football
说明:更新某个成员的分数

2、ZRANGE
获取key中给定索引范围内的成员:zrange key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

  • start stop:索引范围,且start、stop都为闭区间,比如start=0,stop=-1 => 代表获取集合内的所有成员。
  • [BYSCORE|BYLEX]:BYSCORE:通过分数进行排序获取,BYLEX:lexicographical ordering,通过字典顺序进行排序获取。

当获取信息选择BYSCORE或BYLEX时,start与stop将转变成获取的min与max,用作取值范围,参考以下几个示例。
min与max的值有以下四种情景:
带有 [ 符号的值表示结果中包含与给定值具有同等字典序大小的成员
带有 ( 符号表示在不结果中不包含与给定值具有同等字典序大小的成员
加号 + 表示无穷大
减号 - 表示无穷小

  • [REV]:reverse(反转),意思就是按照原有顺序的反顺序进行排序展示。
  • [LIMIT offset count]:分页展示,offset:偏移量。count:要获取的条数。
  • [WITHSCORES]:展示的时候带上分数值

[BYSCORE|BYLEX]实践:zrange ball 80 410 byscore
说明:byscore时,start与stop都是闭区间。

[BYSCORE|BYLEX]实践:zrange letter [a [d bylex
说明:[代表闭区间,所以取的是a到b闭区间内的所有元素

[REV]实践:zrange ball 410 (80 byscore rev
说明:如果执行rev,则min与max的顺序将调转,需要先给出max,再给出min。语法可见:zrange key max min byscore rev

[LIMIT offset count]实践:zrange ball 40 410 byscore limit 0 2
说明:limit只能使用在BYSCORE或BYLEX的环境下。limit可实现限制获取的元素个数。

3、ZREVRANGE
作用:返回指定key中索引范围内的成员,顺序由高到底。
语法:zrevrange key start stop [WITHSCORES]
说明:zrange + rev可实现此命令同样效果。

4、ZRANGEBYLEX
作用:按照字典顺序进行排序后获取指定区间的成员,且可以进行分页。
语法:zrangebylex key min max [LIMIT offset count]
说明:zrange + bylex可实现此命令同样效果。

5、ZREVRANGEBYLEX
作用:用法与ZRANGEBYLEX类似,只是顺序是反的
语法:zrevrangebylex key max min [LIMIT offset count]
说明:zrange + bylex + rev可实现此命令同样效果。

6、ZRANGEBYSCORE
作用:按照分数顺序进行排序后获取指定区间的成员,且可以进行分页。
语法:zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
说明:zrange + byscore可实现此命令同样效果。

7、ZREVRANGEBYSCORE
作用:用法与ZRANGEBYSCORE类似,只是顺序是反的。
语法:zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
说明:zrange + byscore + rev可实现此命令同样效果。

8、ZINCRBY
作用:给key中的成员增加分数
语法:zincrby ball increment member
说明:zadd + incr可实现此命令同样效果。

9、ZCARD
作用:获取指定key中的成员数量。
语法:zcard key

10、ZCOUNT
作用:获取指定 key 下分数范围内的成员的数量。
语法:zcount key min max

11、ZPOPMAX
作用:返回指定 key 的分数最大的 N 个成员,并将返回的成员从 key 中删除。
语法:zpopmax key [count]

12、ZPOPMIN
作用:返回指定 key 的分数最小的 N 个成员,并将成员从 key 中删除。
语法:zpopmin key [count]

13、ZLEXCOUNT
作用:返回成员之间的数量。
语法:zlexcount key min max

14、ZRANK
作用:按照分数由低到高的顺序查看成员的排名。
语法:zrank key member
实践:zrank ball baseball。查看baseball的分数由低到高的顺序排名

15、ZREVRANK
作用:按照分数由高到低的顺序查看成员的排名。
语法:zrevrank key member
实践:zrank ball baseball。查看baseball的分数由高到低的顺序排名

16、ZREM
作用:删除 zset 中的一个或多个成员,当成员为空时,删除该 key。
语法:zrem key member [member ...]

17、ZREMRANGEBYRANK
作用:按照排名进行删除成员。
语法:zremrangebyrank key start stop
实践:删除排名0,1的两个成员:zremrangebyrank ball 0 1

18、ZREMRANGEBYSCORE
作用:按照分数进行删除成员。
语法:zremrangebyscore key min max
实践:删除分数80到200的成员:zremrangebyscore ball 80 200

19、ZREMRANGEBYLEX
作用:按照字典顺序进行删除成员。
语法:zremrangebylex key min max
实践:删除字典c到k的成员:zremrangebylex letter [c [k

20、ZSCORE
作用:获取指定成员的分数。
语法:zscore key member

-------------------增、删、改、查操作结束------------------


-------------------交集、并集操作开始------------------

1、ZINTERSCORE
作用:将两个或多个 zset 求交集,并存在destination中。
语法:zinterstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
[WEIGHTS weight [weight ...]]:权重,当交集元素进行合并时,可以按照权重来取分数
[AGGREGATE SUM|MIN|MAX]:聚合,zinterstore默认就是SUM相加的方式
实践:zinterstore k3 2 k1 k2。下图中可知,交集元素的分数会合并。

[WEIGHTS weight [weight ...]]实践:zinterstore k4 2 k1 k2 weights 2 3
说明:求k1、k2的交集,并取k1的权重为2,k2的权重为3。
计算权重:k4(aa) = k1(aa) * 2 + k2(aa) * 3 = 100 * 2 + 100 * 3 = 500

[AGGREGATE SUM|MIN|MAX]实践:zinterstore k5 2 k1 k2 aggregate sum
说明:求k1、k2的交集,聚合方式为相加,及k1的分数加上k2的分数。

[AGGREGATE SUM|MIN|MAX]实践:zinterstore k5 2 k1 k2 aggregate min
说明:求k1、k2的交集,聚合方式为取最小,及k1的分数与k2的分数中最小的那个。

[AGGREGATE SUM|MIN|MAX]实践:zinterstore k5 2 k1 k2 aggregate max
说明:求k1、k2的交集,聚合方式为取最大,及k1的分数与k2的分数中最大的那个。

2、ZUNIONSCORE
作用:将两个或多个 zset 求并集,并存在destination中。
语法:zunionstore destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
说明:用法与zinterstore一致

-------------------交集、并集操作结束------------------

参考文献:https://cloud.tencent.com/developer/article/1690154?from=15425

标签:分数,ball,数据类型,成员,redis,语法,k1,key,基本操作
From: https://www.cnblogs.com/szbm/p/16770448.html

相关文章

  • 7. JS数据类型(基本数据类型+引用类型)
    1.前言数据类型指的是可以在程序中存储和操作的值的类型,每种编程语言都有其支持的数据类型,不同的数据类型用来存储不同的数据,例如文本、数值、图像等。JavaScript是一种......
  • linux安装redis扩展
    1、下载github中的稳定版本库。php7gitclonehttps://github.com/phpredis/phpredistar-zxvfphpredis进入解压后目录cdphpredis2、使用安装php时生成的phpize来生......
  • easyswoole - mysql以及redis连接池
    1.安装组件安装easyswoole/pool通用连接池组件composerrequireeasyswoole/pool安装easyswoole/redis-pool协程连接池组件composerrequireeasyswoole/redis-p......
  • 计算机的计量单位以及常见的数据类型
    为什么会写这篇文章,面试官问数据类型占字节大小干什么。实际开发中,你肯定计算预估过一些数据具体要占多少磁盘,或者是内存。如果你没有不去在意这些东西,很多服务器资源,都会被......
  • Dragonfly 世界上最快的内存数据库横空出世,比 Redis 快 25 倍,Star 数飙升,杀疯了!
    一、Redis博客文章翻译二、速度问题三、架构差异四、总结今年年中,一位前谷歌、前亚马逊的工程师推出了他创作的开源内存数据缓存系统Dragonfly,用C/C++编写,基于......
  • Redis 开发与运维--第5章 持久化
    Redis支持RDB和AOF两种持久化机制,持久化功能有效避免因为进程退出而造成数据丢失的问题。当下次重启时候利用之前持久化的文件即可实现数据恢复。本章内容如下:......
  • redis-cli pipe 管道
    cat formattedData.txt |redis-cli-h10.11.0.71-p6385--pipe#coding=utf-8importsysimportMySQLdboutputFile="formattedData.txt"delimiter="\r\n"forli......
  • 第二章:数据类型、运算符和表达式
    目录​​一、在屏幕上输出英文短句“Programmingisfun.”。​​​​ 二、输入半径,分别计算球体积和球表面积。​​​​ 三、转义字符使用示例。​​​​ 四:利用符号常......
  • Redis学习:Redis在Windows下的安装
    一、Redis1、官网地址:**GitHub地址:https://github.com/MSOpenTech/redis/tags备注:现在的Redis官网没有Windows版的下载链接了,只能到GitHub上下载,截止到此刻的最新版本......
  • Java 数据类型 扩展
    publicclassDemo2{publicstaticvoidmain(String[]args){//整数拓展进制:二进制ob,十进制,8进制0,16进制0xinti=10;inti......