Redis 常用数据类型之 zset(有序集合)

有序集合 zset(sorted-set)相关特性

  • redis 有序集合 zset 与 无序 set 类型的一样,都是 string 类型的集合元素,且元素不允许重复。
  • zset 的每个元素都会关联一个 double 类型的分数(score)。redis 就是通过分数来为集合中的成员进行从小到大的排序。
  • 有序集合的成员是唯一的,但是对应的分数 (score)是可以重复的。

zset 相关命令

操作

命令

例子

说明

添加

zadd

zadd key score1 name1 score2 name2 score3 name3

key 为集合名,score1 表示 分数(用于排序)

,name1 表示元素;对于已经存在的元素,重新执行 zadd 操作,会更新对应 score1 的值,也就分数值(会根据新的分数值进行排序)

zscore

zscore key name1

获取到 name1 的分数

获取成员数量

zcard

zcard  key

 

zrem

zrem key name1 name2

 

范围查寻(从小到大)

zrange

zrange key 0 -1

zrange key 0 -1 withscores

注:withscores如果没有添加不会显示值; -1 表示最后一位

范围查寻(从大到小)

zrevrange

zrevrange key 0 -1

zrevrange key 0 -1 withscores

同 zrange 一样,只是顺序反过来

按照范围删除

zremrangebyrank

zremrangebyrank key 0 4

删除下标为0 到 4之前的元素

按照value删除

zremrangebyscore

zremrangebyscore 80 90

将删除 分数在 80(包括) 到 90(包括) 之间的元素

根据分数显示元素

zrangebyscore

zrangebyscore sort score1 score2(withscores)(limit a b)

由低到高显示分数score1到score2之间的元素(带上分数显示)(显示a-b之间的元素)

指定成员增加

zincrby

zincrby key a b

将元素b对应的分数加a,返回加完之后b对应的分数

返回分数之间的元素个数

zcount

zcount key score1 score2

返回分数score1到分数score2之间的元素个数

详细操作

基础操作(zadd、zcrad、zcount)

127.0.0.1:6379> zadd books 49 java 79 springboot 80 python 50 php        # 添加元素
(integer) 4
127.0.0.1:6379> zadd books 30 java2
(integer) 1
127.0.0.1:6379> zcard books                                              # 查看数量
(integer) 5
127.0.0.1:6379> zcount books 0 3                                         # 根据分数显示指定的元素,有没有分数在 0 到 3 的数据,这里就返回 0
(integer) 0
127.0.0.1:6379> zcount books 0 70                                        # 返回分数在 0 到 70 之间的数据
(integer) 3
127.0.0.1:6379>

排序操作(zrange 、zrevrange )

127.0.0.1:6379>zrange books 0 -1                                        # 顺序查询集合中的成员
1) "java2"
2) "java"
3) "php"
4) "springboot"
5) "python"
127.0.0.1:6379> zrevrange books 0 -1                                     # 倒序查看集合中的成员
1) "python"
2) "springboot"
3) "php"
4) "java"
5) "java2"
127.0.0.1:6379>

根据分数显示元素(zrangebyscore

这里有一个内置值 inf,表示无穷,  -inf 表示负无穷, +inf 表示正无穷

127.0.0.1:6379> zrangebyscore books -inf +inf                # 显示元素从大到小排序
1) "java2"
2) "java"
3) "php"
4) "springboot"
5) "python"
127.0.0.1:6379> zrangebyscore books -inf +inf withscores     # 显示元素从大到小,并且附带成绩1) "java2"2) "30"3) "java"4) "49"5) "php"6) "50"7) "springboot"8) "79"9) "python"
10) "80"
127.0.0.1:6379> zrangebyscore books -inf 50 withscores        # 显示元素 <= 50 的那部分
1) "java2"
2) "30"
3) "java"
4) "49"
5) "php"
6) "50"
127.0.0.1:6379>

删除操作(zrem、zremrangebyrank、zremrangebyscore)

127.0.0.1:6379> zrem books java                    # 删除指定元素
(integer) 1
127.0.0.1:6379> zrange books 0 -1
1) "java2"
2) "php"
3) "springboot"
4) "python"
127.0.0.1:6379> zremrangebyrank books 0 -1         # 根据数组下标删除指定的元素
(integer) 4
127.0.0.1:6379> zrange books 0 -1
(empty list or set)
127.0.0.1:6379>
127.0.0.1:6379> zadd mysort 10 key1 20 key2 30 key3 40 key4            #  重新添加集合元素
(integer) 4
127.0.0.1:6379> zadd mysort 10 key5 30 key6
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1                                     # 查看集合中的元素
1) "key1"
2) "key5"
3) "key2"
4) "key3"
5) "key6"
6) "key4"
127.0.0.1:6379> zremrangebyrank mysort 0 2                            # 根据数组的下标来删除元素
(integer) 3
127.0.0.1:6379> zrange mysort 0 -1
1) "key3"
2) "key6"
3) "key4"
127.0.0.1:6379> zrangebyscore mysort -inf +inf WITHSCORES
1) "key3"
2) "30"
3) "key6"
4) "30"
5) "key4"
6) "40"
127.0.0.1:6379> zremrangebyscore mysort 0 1                         # 根据分数来删除,但是此时没有分数满足 0 到 1 删除的结果就为 0
(integer) 0
127.0.0.1:6379> zrange mysort 0 -1                                  # 再次查看
1) "key3"
2) "key6"
3) "key4"
127.0.0.1:6379> zremrangebyscore mysort 0 35                        # 再次根据分数来删除
(integer) 2
127.0.0.1:6379> zrange mysort 0 -1
1) "key4"
127.0.0.1:6379>

Redis 常用数据类型之 zset(有序集合)相关推荐

  1. Redis五大数据类型(字符串对象(string)、列表对象(list)、哈希对象(hash)、无序集合(set)和Sorted Set数据类型(zset有序集合))

    Redis五大数据类型 一.String(字符串)数据类型 1.SET/GET/APPEND/STRLEN 2.INCR/DECR/INCRBY/DECRBY 3.GETSET 4. SETEX 5. ...

  2. Redis(八):Zset有序集合数据类型详解

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员. 不同的是每个元素都会关联一个double类型的分数.redis正是通过分数来为集合中的成员进行从小到大的排序. 有序 ...

  3. Redis Zset有序集合

    Redis Zset有序集合 1.zadd 添加一个或多个值 并且区分SCORE 2.zrange 返回有序集合区间 3.zrangebyscore 通过分数score排名,从低到高 4.Zrevra ...

  4. Redis常用数据类型使用及基本知识

    前言(基本知识) Redis背景   08年的时候有一个意大利西西里岛的小伙子,笔名antirez(http://invece.org/),创建了一个访客信息网站   LLOOGG.COM.这个网站是 ...

  5. redis常用数据类型的场景,你真的用对了么?

    关注微信公众号"虾米聊吧",每天更新一篇技术文章,文章内容涵盖架构师成长必经之路应掌握的技术,一起学习,一起交流. redis常用数据类型的场景,你真的用对了么? redis常用数 ...

  6. Redis常用数据类型及使用场景

    String(字符串) 常用命令 SET key value GET key GETRANGE key start end #返回[start, end]区间的字符串,key不存在时返回空字符串 MG ...

  7. redis中的order set 有序集合

    redis中的order set 有序集合 命令 1 zadd key score1 value1 score2 value2 .. 添加元素 127.0.0.1:6379> zadd user ...

  8. Redis面试常问-- Redis常用数据类型

    Redis常用数据类型 http://www.redis.cn/

  9. redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...

    Redis的有序集合Sorted Set(zset),可以很方便地用来构建关键字索引表,可以很方便地实现支持超大规模并发的关键字组合条件查询. 比如有套博客系统,博客文章存放在 hash 类型 art ...

最新文章

  1. 在 Asp.NET MVC 中使用 SignalR 实现推送功能
  2. Java的知识点24——多线程技术理论——程序、进程、线程
  3. Python3 字符串与hex之间的相互转换
  4. mysql事务编号_Mysql事务
  5. qt中创建控件布局以及删除原有布局和控件
  6. 半径为r的均匀带电球体_一半径为R的均匀带电球体,其电荷的体密度为ρ.求(1)球外任一点的电势;(2)球表面上的电势;(3...
  7. 这些将在新一年改变你的风控内容
  8. linux系列的命令补充
  9. 孙鑫VC学习笔记:第十一讲 (三) 如何把元文件保存到文件当中
  10. bzoj千题计划152:bzoj3405: [Usaco2009 Open]Grazing2 移动牛棚
  11. python turtle输出坐标_如何在Python/turtle中使用坐标列表绘制形状
  12. dedecms(织梦)采集规则规则宝典
  13. 我们不用开浏览器也能上BBS——带你体验telnet的魅力(zz) (转载)
  14. html页面禁止竖屏,关于移动端页面强制竖屏的方法
  15. 沁恒蓝牙芯片CH57x系列学习与应用
  16. ecb里使用自定义快捷键切换窗口
  17. Ubuntu 装搜过输入法后桌面黑屏
  18. 数学会对计算机编程的关系
  19. L1-2 h0053. 游戏时间 (5 分)
  20. 对Zebra的一点思考(Think of Zebra)

热门文章

  1. mysql5.7集群方案
  2. 微信开源PhxSQL:高可用、强一致的MySQL集群
  3. 终于享受到了高清壁纸的视觉冲击
  4. 二维数组练手小程序--后宫管理
  5. 微博快手引流哪个好?引流推广平台主要都有哪些?
  6. 华为Mate 10系列发布,人工智能加持!体验如何?
  7. window下安装git flow
  8. 分享一次购物体验airpods 无线充电器
  9. JS 中的类数组对象如何转换为数组?
  10. 【css实现 oppo 图标】