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/1860018,如需转载请自行联系原作者

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
9天前
|
NoSQL Redis 数据库
Redis的全局命令及相关误区
Redis的全局命令及相关误区
21 0
|
16天前
|
存储 消息中间件 NoSQL
Redis数据类型详解:选择合适的数据结构优化你的应用
Redis数据类型详解:选择合适的数据结构优化你的应用
|
18天前
|
NoSQL Redis 数据库
Redis中的常用命令有哪些?
Redis常用命令包括:PING测试连接,ECHO回显,SELECT切换数据库,QUIT关闭连接;KEYS查找key,EXISTS检查存在,DEL删除key,EXPIRE设置过期时间,TTL查看剩余生存时间,TYPE检测数据类型;STRING操作如SET/GET/MSET/MGET,INCR/DECR增减计数;HASH命令如HSET/HGET/HMSET/HMGET/HGETALL管理字段;LIST操作如LPUSH/RPUSH/LPOP/RPOP/LRANGE;
9 0
|
25天前
|
存储 NoSQL Java
【Redis系列】那有序集合为什么要同时使用字典和跳跃表
面试官问:那有序集合为什么要同时使用字典和跳跃表来实现?我:这个设计主要是考虑了性能因素。1. 如果单纯使用字典,查询的效率很高是O(1),但执行类似ZRANGE、ZRNK时,排序性能低。每次排序需要在内存上对字典进行排序一次,同时消耗了额外的O(n)内存空间
28 1
【Redis系列】那有序集合为什么要同时使用字典和跳跃表
|
23天前
|
NoSQL Redis
Redis集群(六):集群常用命令及说明
Redis集群(六):集群常用命令及说明
15 0
|
11天前
|
NoSQL Redis 数据库
通过migrate命令实现两个redis实例之间的数据迁移
通过migrate命令实现两个redis实例之间的数据迁移
|
18天前
|
存储 XML NoSQL
Redis支持哪些数据类型?
Redis提供五种数据类型:String(支持JSON、XML等序列化,最大512MB),Hash(键值对,适合存储对象),List(有序列表,可在两端添加元素),Set(无序唯一元素集合),以及Sorted Set(有序集合,元素带分数排序)。每种类型有特定应用场景,优化了数据操作效率。
8 0
|
1月前
|
NoSQL Redis 索引
[Redis]——Redis命令手册set、list、sortedset
[Redis]——Redis命令手册set、list、sortedset
|
1月前
|
存储 消息中间件 NoSQL
Redis 常见数据类型(对象类型)和应用案列
接下来,让我们走进 Redis 的对象世界,Redis 5.0版本就已经支持了下面的 9 种类型,分别是 :字符串对象、列表对象、哈希对象、集合对象、有序集合对象、Bitmaps 对象、HyperLogLog 对象、Geospatial 对象、Stream对象。
Redis 常见数据类型(对象类型)和应用案列
|
1月前
|
存储 NoSQL Redis
Redis新数据类型-Bitmaps
Redis新数据类型-Bitmaps

热门文章

最新文章