一、简介

  1. zset与set异同
  • 相同之处:

    都是没有重复元素的字符串集合
  • 不同之处:

    有序集合zset的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。

    因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

    访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

二、常用命令

1、zadd 语法:zadd <key><score1><value1><score2><value2>…将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
127.0.0.1:6379> zadd myzset 1 one			#在set集合基础上增加了score。
(integer) 1
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
2、zrange 语法:zrange <key><start><stop> [withscores] 返回有序集 key 中,下标在<start><stop>之间的元素
127.0.0.1:6379> zrange myzset 0 -1				#获取myzset里的全部值
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> zrange myzset 0 1 #获取myzset里下标在0-1的元素
1) "one"
2) "two"
127.0.0.1:6379> zrange myzset 0 3 #获取myzset里下标在0-3的元素
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379>
3、zrangebyscore 语法:zrangebyscore key minmax [withscores] [limit offset count] 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
127.0.0.1:6379> zadd salary 1000 zhangsan			# 测试数据
(integer) 1
127.0.0.1:6379> zadd salary 2000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 3000 wangwu
(integer) 1
127.0.0.1:6379> zrangebyscore salary -inf +inf # 显示整个有序集
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> zrangebyscore salary -inf +inf withscores # 显示整个有序集及成员的 score 值
1) "zhangsan"
2) "1000"
3) "lisi"
4) "2000"
5) "wangwu"
6) "3000"
127.0.0.1:6379> zrangebyscore salary -inf 2000 withscores # 显示工资 <=2000 的所有成员
1) "zhangsan"
2) "1000"
3) "lisi"
4) "2000"
127.0.0.1:6379> zrangebyscore salary (2000 5000 # 显示工资大于 2000 小于等于 5000 的成员
1) "wangwu"
127.0.0.1:6379>
4、zrevrangebyscore 语法:zrevrangebyscore key maxmin [withscores] [limit offset count]同上,改为从大到小排列。
127.0.0.1:6379> zadd salary 1000 zhangsan
(integer) 1
127.0.0.1:6379> zadd salary 2000 lisi
(integer) 1
127.0.0.1:6379> zadd salary 3000 wangwu
(integer) 1
127.0.0.1:6379> zrevrangebyscore salary +inf -inf # 逆序排列所有成员
1) "wangwu"
2) "lisi"
3) "zhangsan"
127.0.0.1:6379> zrevrangebyscore salary 5000 3000 # 逆序排列薪水介于 5000 和 2000 之间的成员
1) "wangwu"
127.0.0.1:6379>
5、zincrby 语法:incrby <key><increment><value> 为元素的score加上增量
127.0.0.1:6379> zadd myzset 1 why
(integer) 1
127.0.0.1:6379> zincrby myzset 12 why #分数加上增量12
"13"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "why"
2) "13"
127.0.0.1:6379>
6、zrem 语法:zrem <key><value> 删除该集合下,指定值的元素。
127.0.0.1:6379> zrange test 0 -1 withscores				#测试数据
1) "www.baidu.com"
2) "1"
3) "www.cainiao.com"
4) "1"
5) "www.guge.com"
6) "1"
127.0.0.1:6379>
127.0.0.1:6379> zrem test www.cainiao.com #移除指定的值
(integer) 1
127.0.0.1:6379> zrange test 0 -1 withscores #查看test里面的数据
1) "www.baidu.com"
2) "1"
3) "www.guge.com"
4) "1"
127.0.0.1:6379> zrem test www.cainiao.com #移除不存在的值
(integer) 0
127.0.0.1:6379>
7、zcount `语法:zcount ·统计该集合,分数区间内的元素个数
127.0.0.1:6379> zadd myzset 1 hello				#添加测试数据
(integer) 1
127.0.0.1:6379> zadd myzset 1 why
(integer) 1
127.0.0.1:6379> zadd myzset 2 zhansgan
(integer) 1
127.0.0.1:6379> zadd myzset 3 lisi
(integer) 1
127.0.0.1:6379> zcount myzset 1 3 #统计数据为1-3的值
(integer) 4
127.0.0.1:6379>
8、zrank 语法:zrank <key><value> 返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
127.0.0.1:6379> zrange salaory 0 -1 withscores			#测试数据
1) "zhangsan"
2) "2000"
3) "lisi"
4) "3000"
5) "wangwu"
6) "5000"
127.0.0.1:6379> zrank salaory lisi #获得李四的排名为第二,0为第一名
(integer) 1
127.0.0.1:6379> zrank salaory zhangsan
(integer) 0
127.0.0.1:6379> zrank salaory wangwu
(integer) 2
127.0.0.1:6379>

三、使用场景

  • 1、排行榜系统

    有序集合比较典型的使用场景就是排行榜系统。例如学生成绩的排名。某视频(博客等)网站的用户点赞、播放排名、电商系统中商品的销量排名等。
127.0.0.1:6379> zadd user:ranking 10 article1					#发表一篇文章,获得十个点赞
(integer) 1
127.0.0.1:6379> zincrby user:ranking -1 article1 #我觉得他写的不好,所以取消点赞
"9"
127.0.0.1:6379> zscore user:ranking article1 #查看文章的点赞数
"9"
127.0.0.1:6379> zrange user:ranking 0 9 #展示点赞最多的十篇文章
1) "article1"
127.0.0.1:6379>
  • 2、电话号码(姓名)排序
127.0.0.1:6379> zadd phone 0 13100111100 0 13110114300 0 13132110901
(integer) 3
127.0.0.1:6379> zadd phone 0 13200111100 0 13210414300 0 13252110901
(integer) 3
127.0.0.1:6379> zadd phone 0 13300111100 0 13310414300 0 13352110901
(integer) 3
127.0.0.1:6379> zrangebylex phone - + #获取所有号码
1) "13100111100"
2) "13110114300"
3) "13132110901"
4) "13200111100"
5) "13210414300"
6) "13252110901"
7) "13300111100"
8) "13310414300"
9) "13352110901"
127.0.0.1:6379> zrangebylex phone [132 (133 #获取132号段
1) "13200111100"
2) "13210414300"
3) "13252110901"
127.0.0.1:6379> zrangebylex phone [132 (134 #获取132,133号段
1) "13200111100"
2) "13210414300"
3) "13252110901"
4) "13300111100"
5) "13310414300"
6) "13352110901"
127.0.0.1:6379>

更多关于zset命令查看官网

9、Redis五大数据类型---有序集合Zset(sorted set)的更多相关文章

  1. redis:php-redis中有序集合 zset的使用

    ZSET(stored set) 和 set 一样是字符串的集合,不同的是每个元素都会关联一个 double 类型的 score .实现使用的是 skip list 和 hash table , sk ...

  2. redis 有序集合(zset)函数

    redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...

  3. Redis对象——有序集合(ZSet)

    有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序 ...

  4. php使用redis的有序集合zset实现延迟队列

    延迟队列就是个带延迟功能的消息队列,相对于普通队列,它可以在指定时间消费掉消息. 延迟队列的应用场景: 1.新用户注册,10分钟后发送邮件或站内信. 2.用户下单后,30分钟未支付,订单自动作废. 我 ...

  5. 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)

    本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...

  6. 聊聊Mysql索引和redis跳表 ---redis的有序集合zset数据结构底层采用了跳表原理 时间复杂度O(logn)(阿里)

    redis使用跳表不用B+数的原因是:redis是内存数据库,而B+树纯粹是为了mysql这种IO数据库准备的.B+树的每个节点的数量都是一个mysql分区页的大小(阿里面试) 还有个几个姊妹篇:介绍 ...

  7. Redis五大数据类型的常用操作

    在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...

  8. Redis五大数据类型

    首先说明下,Redis是:单线程+多路IO复用技术!!! string set  >  key  +  zset          list hash 常用的几个命令: >keys * 查 ...

  9. 细谈Redis五大数据类型

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String.List.Hash.Set.SortS ...

随机推荐

  1. Python基础(slice切片)

    l = ['傻狗1','傻狗2','傻狗3','傻狗4','傻狗5','傻狗6'] print(l[0:3])#['傻狗1', '傻狗2', '傻狗3'] numbers = list(range(1 ...

  2. [hdu6997]愿望幽灵

    约定:$[x^{n}]F(x)$​​​​​​表示多项式$F$​​​​​​的$n$​​​​​​次项系数 对于多项式$F$​​​​​​,定义$F$​​​​​的复合逆$\hat{F}$​​​​​为满足$F( ...

  3. [luogu1737]旷野大计算

  4. Study Blazor .NET(一)简介

    翻译自:Study Blazor .NET,转载请注明. 介绍 Blazor是一个全新的 Web UI 框架,它使用c# .Razor 和 HTML以及 WebAssembly W3C标准.它提供了用 ...

  5. CF1610F F. Mashtali: a Space Oddysey

    我们首先发现有如下性质: 我们不妨先随机定向边,那么我们发现无论我们如何翻转边. 都会对其两端的点,造成 \(2 / 4\) 的影响,所以我们发现如果一个点其和他相连的所有边权和为偶数,则我们不能调整 ...

  6. CODE FESTIVAL 2017 qual C F - Three Gluttons(DP)

    洛谷题面传送门 & Atcoder 题面传送门 DP 好题. 首先考虑如果我们知道 C 吃了哪些寿司,能够还原出多少种符合条件的序列.我们考虑倒着钦定,即,先钦定 A,B,C 三者最后吃的那三 ...

  7. 【2020五校联考NOIP #7】道路扩建

    题面传送门 题意: 给出一张 \(n\) 个点 \(m\) 条边的无向图 \(G\),第 \(i\) 条边连接 \(u_i,v_i\) 两个点,权值为 \(w_i\). 你可以进行以下操作一次: 选择 ...

  8. P7416 [USACO21FEB] No Time to Dry P

    题目传送门 题意简述:给出颜色序列 \(a\),多次询问给出 \(l,r\),求涂成 \(a_l,a_{l+1},\cdots,a_r\) 的最小操作次数.每次涂色只能用一段数值更大的颜色覆盖原有的颜 ...

  9. python-django-常用models里面的Field

    1.models.AutoField 自增列 = int(11) 如果没有的话,默认会生成一个名称为 id 的列 如果要显式的自定义一个自增列,必须设置primary_key=True. 2.mode ...

  10. 【Python小试】计算目录下所有DNA序列的Kmer并过滤

    背景 Kmer是基因组组装算法中经常接触到的概念,简单来说,Kmer就是长度为k的核苷酸序列.一般长短为m的reads可以分成m-k+1个Kmer.Kmer的长度和阈值直接影响到组装的效果. Deno ...