Redis有序集合数据类型操作命令

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

sorted sets类型及操作

sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset(有序集合)会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。


zset的方法:

zadd:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> zadd myzset 1 one
(integer) 1
(0.76s)
127.0.0.1:6379> zadd myzset 2 two
(integer) 1
127.0.0.1:6379> zadd myzset 3 two
(integer) 0
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "two"
4)  "3"
127.0.0.1:6379> zrange myzset 0 -1 
1)  "one"
2)  "two"


zrange:对有序集合中的元素按照score值进行升序排序

1
2
3
4
5
6
7
8
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "two"
4)  "3"
127.0.0.1:6379> zrange myzset 0 -1 
1)  "one"
2)  "two"



zrem:删除名为key的zset中元素member

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "two"
4)  "3"
127.0.0.1:6379> zrem myzset two
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"


zincrby:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
127.0.0.1:6379> zincrby myzset 2 one
"3"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "3"
127.0.0.1:6379> zincrby myzset 2 two
"2"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "two"
2)  "2"
3)  "one"
4)  "3"


如果增加的幅度值为负数,则表示自减

1
2
3
4
5
6
7
8
9
10
11
12
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "two"
2)  "2"
3)  "one"
4)  "3"
127.0.0.1:6379> zincrby myzset -2 one
"1"
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "two"
4)  "2"


zrank:返回名称为key的zset中member元素的排名(按score从小到大排序),即下标(或者说是索引)

1
2
3
4
5
6
7
8
9
127.0.0.1:6379>zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "two"
4)  "2"
127.0.0.1:6379> zrank myzset one
(integer) 0
127.0.0.1:6379> zrank myzset two
(integer) 1

在myzset中one的score为1,two的score为2,而索引是从0开始的,所以one的索引值为0,two的索引值为1.

注意:索引值和score值不相等,索引值比score值小1


zrevrank:返回名称为key的zset中member元素的排名(按score从大到小排序)即小标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
127.0.0.1:6379> zrange myzset 0 -1 withscores
  1)  "one"
  2)  "1"
  3)  "two"
  4)  "2"
  5)  "three"
  6)  "3"
  7)  "four"
  8)  "4"
  9)  "five"
  10)  "5"
127.0.0.1:6379> zrevrank myzset five
(integer) 0
127.0.0.1:6379> zrevrank myzset four
(integer) 1
127.0.0.1:6379> zrevrank myzset three
(integer) 2

zrevrank和zrank相反,zrevrank先将有序集合中的元素按照score进行降序排序,然后再获取元素的小标索引值


zrevrange:与zrange相反,对有序集合中的元素按照score值进行降序排序

127.0.0.1:6379> zrevrange myzset 0 -1 withscores

1
2
3
4
5
6
7
8
9
10
  1)  "five"
  2)  "5"
  3)  "four"
  4)  "4"
  5)  "three"
  6)  "3"
  7)  "two"
  8)  "2"
  9)  "one"
  10)  "1"


zrangebyscore:返回集合中score在给定区间的元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> zrevrange myzset 0 -1 withscores
  1)  "five"
  2)  "5"
  3)  "four"
  4)  "4"
  5)  "three"
  6)  "3"
  7)  "two"
  8)  "2"
  9)  "one"
  10)  "1"
127.0.0.1:6379> zrangebyscore myzset 2 4 withscores
1)  "two"
2)  "2"
3)  "three"
4)  "3"
5)  "four"
6)  "4"


zcount:返回集合中score在给定区间的元素的数量

1
2
127.0.0.1:6379> zcount myzset 2 4
(integer) 3


zcard:返回集合中所有元素的个数

1
2
3
4
5
6
7
8
9
10
11
12
13
127.0.0.1:6379> zcard myzset 
(integer) 5
127.0.0.1:6379> zrange myzset 0 -1 withscores
  1)  "one"
  2)  "1"
  3)  "two"
  4)  "2"
  5)  "three"
  6)  "3"
  7)  "four"
  8)  "4"
  9)  "five"
  10)  "5"


zremrangebyrank:删除集合在给定下标区间的所有元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> zrange myzset 0 -1 withscores
  1)  "one"
  2)  "1"
  3)  "two"
  4)  "2"
  5)  "three"
  6)  "3"
  7)  "four"
  8)  "4"
  9)  "five"
10)  "5"
127.0.0.1:6379> zremrangebyrank myzset 1 3
(integer) 3
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "five"
4)  "5"

注意:这个是byrank,即按照所以来删除,不是按照score来删除



zremrangebyscore:删除集合在给定score区间的元素

1
2
3
4
5
6
7
8
9
10
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "one"
2)  "1"
3)  "five"
4)  "5"
127.0.0.1:6379> zremrangebyscore myzset 0 1 
(integer) 1
127.0.0.1:6379> zrange myzset 0 -1 withscores
1)  "five"
2)  "5"









本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1859815,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
算法 调度 云计算
云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化
本程序针对云计算任务调度优化问题,旨在减少任务消耗时间、提升经济效益并降低设备功耗。通过对比蚁群优化算法(ACO)与蛙跳优化算法(SFLA),分别模拟蚂蚁信息素路径选择及青蛙跳跃行为,在MATLAB2022A环境下运行测试。核心代码实现任务分配方案的动态调整与目标函数优化,结合任务集合T与服务器集合S,综合考量处理时间与能耗等约束条件,最终输出优化结果。两种算法各具优势,为云计算任务调度提供有效解决方案。
234 17
|
11月前
|
存储 机器学习/深度学习 人工智能
《量子AI:突破量子比特稳定性与容错性的关键瓶颈》
量子计算的发展面临量子比特稳定性和容错性的关键挑战。量子纠错技术如表面码、Steane七量子比特颜色代码等,通过编码和解码提高可靠性。硬件设计选择超导或离子阱量子比特,结合低噪声器件减少干扰。量子噪声抑制技术优化环境,降低噪声影响。拓扑量子计算利用多体系统的拓扑性质实现天然容错。量子算法优化和AI技术助力,进一步提升抗干扰能力。尽管取得进展,但要实现大规模应用仍需克服诸多挑战。
286 13
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
人工智能 自然语言处理 语音技术
利用Python进行自然语言处理(NLP)
利用Python进行自然语言处理(NLP)
323 3
|
图形学 机器学习/深度学习 人工智能
颠覆传统游戏开发,解锁未来娱乐新纪元:深度解析如何运用Unity引擎结合机器学习技术,打造具备自我进化能力的智能游戏角色,彻底改变你的游戏体验——从基础设置到高级应用全面指南
【8月更文挑战第31天】本文探讨了如何在Unity中利用机器学习增强游戏智能。作为领先的游戏开发引擎,Unity通过ML-Agents Toolkit等工具支持AI代理的强化学习训练,使游戏角色能自主学习完成任务。文章提供了一个迷宫游戏示例及其C#脚本,展示了环境观察、动作响应及奖励机制的设计,并介绍了如何设置训练流程。此外,还提到了Unity与其他机器学习框架(如TensorFlow和PyTorch)的集成,以实现更复杂的游戏玩法。通过这些技术,游戏的智能化程度得以显著提升,为玩家带来更丰富的体验。
427 1
|
测试技术 编译器
软件测试用例经典方法 | 逻辑覆盖测试法及案例
逻辑覆盖测试法是常用的一类白盒测试方法,其以程序内部逻辑结构为基础,通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。 逻辑覆盖测试法是一系列测试过程的总称,是使测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以将其分为语句覆盖、判定覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖等。接下来将通过下面程序的逻辑覆盖测试用例一一介绍这些覆盖准则,该程序的流程图如图4-1所示,其中,a、b、c、d、e是控制流上的若干程序点。
1013 0
软件测试用例经典方法 | 逻辑覆盖测试法及案例
|
算法 安全 物联网
【物联网安全】 一篇文章讲透数字证书
数字证书是一种用于认证网络通信中参与者身份和加密通信的证书,人们可以在网上用它来识别对方的身份。而数字证书则可以很好地解决公钥分发的问题。 在密码技术中数字证书也被称为公钥证书或身份证书, 它是用来证实公钥持有者身份的电子文件。 证书中包主要含公钥的相关信息、 用户身份信息及来自发行者的数字签名。
993 0
 【物联网安全】 一篇文章讲透数字证书
|
SQL 存储 运维
EMR-StarRocks 与 Flink 在汇量实时写入场景的最佳实践
本文详细介绍了 EMR-StarRocks 与 Flink 在汇量实时写入场景的最佳实践。
2570 1
EMR-StarRocks 与 Flink 在汇量实时写入场景的最佳实践
|
存储 机器学习/深度学习 弹性计算
性能最大提升60%,阿里云第八代企业级实例ECS g8i正式上线
3月24日,阿里云宣布新一代企业级弹性计算实例规格族ECS g8i正式上线,具备超高性能、全方位安全防护两大特色优势。
性能最大提升60%,阿里云第八代企业级实例ECS g8i正式上线
|
机器学习/深度学习 数据采集 编解码
杀疯了 | UNETR++:轻量级的共享权重Transformer称霸医学图像分割领域
杀疯了 | UNETR++:轻量级的共享权重Transformer称霸医学图像分割领域
555 0