Redis数据结构详解之Zset(五)

摘要:
接下来,我将展示操作zset的Redis命令。操作单个zset的Redis命令。1.添加。如果添加了值,则将重新排序。Zrange127.0.0.1:6379˃zrangemZySet0-1---0是开始,-1是结束。输出序列结果为:zlhtomjim127.0.0.1:6379˃zrangemZySet0-1withscores---带分数的输出结果为:zlh1tom2jim34。获取zset成员的下标位置。如果该值不存在,则返回null。Zscore127.0.0.1:6379˃zaddmyZset1zlh1tom2jim3xdd4pm--由于上述数据已删除,请在此处添加5个演示数据。127.0.0.1:6379˃zrevrangemyZset24withscores----输出结果为:xdd3jim2zlh1127.0.0.1:639˃zrevrangebyscoremyZset51limit32-----输出结果是:jimzlh。Redis命令在多个zset上运行。1.找到多个zset的并集127.0.0.1:6379˃zaddmyZset1zlh2jim3tom---添加三个数据127.0.0.1:6359˃zaadyouZset1zlh2xd3pmm----添加三数据127.0.0.1:26379˃zunionzstoreheZset2myZsetyouZset---将myzset和youzset的并集添加到hezset。
序言

Zset跟Set之间可以有并集运算,因为他们存储的数据字符串集合,不能有一样的成员出现在一个zset中,但是为什么有了set还要有zset呢?zset叫做有序集合,而set是无序的,zset怎么做到有序的呢?就是zset的每一个成员都有一个分数与之对应,并且分数是可以重复的。有序集合的增删改由于有啦排序,执行效率就是非常快速的,即便是访问集合中间的数据也是非常高效的。

下面我来展示下操作zset的redis命令

操作单个zset的redis命令

1、添加,如果值存在添加,将会重新排序。zadd

127.0.0.1:6379>zadd myZSet 1 zlh   ---添加分数为1,值为zlh的zset集合

127.0.0.1:6379>zadd mySet 2 Tom 3 Jim   ---添加2条zset集合,分别为分数为2、3,值为tom、jim的集合。

2、查看zset集合的成员个数。zcard

127.0.0.1:6379>zcard myZSet   ---输出zset的成员个数为3

3、查看Zset指定范围的成员,withscores为输出结果带分数。zrange

127.0.0.1:6379>zrange mZySet 0 -1   ----0为开始,-1为结束,输出顺序结果为: zlh tom jim

127.0.0.1:6379>zrange mZySet 0 -1 withscores   ---输出带分数的结果为:zlh 1 tom 2 jim 3

4、获取zset成员的下标位置,如果值不存在返回null。zrank

127.0.0.1:6379>zrank mZySet Jim    ---Jim的在zset集合中的下标为2

5、获取zset集合指定分数之间存在的成员个数。zcount

127.0.0.1:6379>zcount mySet 1 3   ---输出分数>=1 and 分数 <=3的成员个数为3,因为分数是可以重复的,所以这个命令是有道理的。

6、删除指定的一个成员或多个成员。zrem

127.0.0.1:6379>zrem myZSet zlh   --删除值为zlh的zset成员

127.0.0.1:6379>zrem myZSet Tom Jim    ---删除值为Tom和Jim的两个zset成员

7、获取指定值的分数。zscore

127.0.0.1:6379>zadd myZset 1 zlh 1 tom 2 jim 3 xdd 4 pmm   ---由于上面的数据被删除完了,这里添加5条示范数据再。

127.0.0.1:6379>zscore myZset zlh    ---输出值为zlh的分数为1

8、给指定元素的分数进行增减操作,负值为减,正值为加。zincrby

127.0.0.1:6379>zscore myZset tom    ----输出tom的分数为1

127.0.0.1:6379>zincrby myZset 4 tom   ---tom的分数值加4,输入分数值为5

127.0.0.1:6379>zscore myZset tom    ---输出tom的分数值为5

9、根据指定分数的范围获取值。zrangebysocre

127.0.0.1:6379>zrangebyscore myZset  1 5   ---输出分数>=1 and <=5的成员值为:zlh jim xdd pmm  tom

127.0.0.1:6379>zrangebyscore myZset  (1 5    ----输出分数>1 and <=5的成员值为:jim xdd pmm tom

127.0.0.1:6379>zrangebyscore myZset 2 5 limit 1 2    ---检索分数为2到5之间的数据,然后从下标为1的数据开始往后输出2个数据,包含下标为1的数据。结果为:xdd pmm

127.0.0.1:6379>zrangebyscore myZset -inf +inf limit 2 3   ----+inf表示最后一个成员,-inf表示第一个成员,意思是:检索所有数据,然后从下标为2的数据开始再往后输出2个数据。结果为:xdd pmm tom

10、倒序,从高到底排序输出指定范围的数据。zrevrange,zrevrangebyscore

127.0.0.1:6379>zrevrange myZset 2 3   ---先倒序排列数据,输出下标为>=2 and <=3的数据为xdd jim,这里注意的是倒序之后下标也反过来了。

127.0.0.1:6379>zrevrange myZset 2 4 withscores    ---输出结果为:xdd 3 jim 2 zlh 1

127.0.0.1:6379>zrevrangebyscore myZset 5 1 limit  3 2  ----输出结果为:jim zlh 。获取score <=5 and >=1,从下标为为3开始获取2条数据。

127.0.0.1:6379>zrevrangebyscore myZset 4 2   ----分数>=2 and <=4 的数据倒序输出:pmm xdd jim

11、根据坐标,分数范围删除数据。zremrangebyscore,zremrangebyrank

127.0.0.1:6379>zremrangebyscore myZset 1 2   ---删除分数>=1 and <=2的数据

127.0.0.1:6379>zrange myZset 0 -1    ----输出结果为 xdd pmm tom

127.0.0.1:6379>zremrangebyrank myZset 0 2    ---删除下标>=0 and <=2的zset元素

127.0.0.1:6379>zrange myZset 0 -1    --输出结果为:empty list or set 。没数据啦。

操作多个zset的redis命令

1、求多个zset的并集

127.0.0.1:6379>zadd myZset 1 zlh 2 jim 3 tom   ---添加3个数据

127.0.0.1:6379>zadd youZset 1 zlh 2 xdd 3 pmm    ---添加3个数据

127.0.0.1:6379>zunionzstore heZset 2 myZset youZset  ----将myzset和youzset的并集添加到hezset中。

2、求多个zset的交集

127.0.0.1:6379>zinterstore sheZset 2 myZset youZset  ----将myzset和youZset 的交集添加到sheZset中。

小结

如果你在看到本文后有什么疑问,请加入博客左上角群,一起交流学习。

我的redis系列博文:双击地址

免责声明:文章转载自《Redis数据结构详解之Zset(五)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇跟我一起写 Makefilejava Redis读取数据方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis实现消息队列

业务需求 本文是以laravel框架来介绍redis队列,具体用法你可以参考http://www.cnblogs.com/lengthuo/p/7277260.html最近接受一个很简单的东西,(说起来很简单,硬是搞了2天。)我们业务中的一些定时是在晚上执行,但是有的定时必须推送微信消息给用户,为了不影响客户的休息,我们之后想把发去推迟这个任务。对于我们...

redis数据审计

1.安装工具 # 1.安装依赖 [root@db02 ~]# yum install -y python-pip python-devel # 2.安装工具 [root@db02 ~]# pip install rdbtools python-lzf # 3.下载或上传 [root@db02 ~]# git clone https://github.c...

Redis Cluster 部署

内容: Redis 编译安装 Redis Cluster部署 Redis 集群扩容 Redis 指定机器下线  环境: 主机名 IP node1 192.168.10.1 node2 192.168.10.2 node3 192.168.10.3 node4 192.168.10.4 node5 192.168.10.5 node6 192....

Redis分布式锁/Redis的setnx命令如何设置key的失效时间(同时操作setnx和expire)

Redis的setnx命令是当key不存在时设置key,但setnx不能同时完成expire设置失效时长,不能保证setnx和expire的原子性。我们可以使用set命令完成setnx和expire的操作,并且这种操作是原子操作。下面是set命令的可选项:  从上面可以看出,多个命令放在同一个redis连接中并且redis是单线程的,因此上面的操作可以看...

Harbor 2.1.2 安装部署

环境 首先需要准备好 Docker + Docker-Compose 环境,Docker 在 CentOS 7.x 的安装教程请参考 这篇文章,后续文章假设你已经安装好了上述环境。 安装 标准安装 首先从 Harbor 的官方 GitHub Relase 下载最新的安装包,Harbor 本身的运行也是依赖于 Docker Compose ,整个压缩包本质上...

CentOS安装Redis 6.0.9

什么是Redis? Redis通常被称为数据结构服务器。这意味着Redis通过一组命令提供对可变数据结构的访问,这些命令是使用带有TCP套接字和简单协议的服务器-客户端模型发送的。因此,不同的进程可以以共享的方式查询和修改相同的数据结构。 在Redis中实现的数据结构具有一些特殊属性: 即使始终为它们提供服务并将它们修改到服务器内存中,Redis也会将...