Redis-五大数据类型-Zset

Redis 有序集合(sorted set)

  • Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
  • 不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
  • 有序集合的成员是唯一的,但分数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用命令

  1. zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数,按照socore的大小排序
  2. zrange key start stop [withscores] 返回有序集中,指定成员个数区间内的成员,返回从第start个到stop个成员的有序集合
  3. zrevrange key start stop [withscores] 逆序返回有序集中,指定成员个数区间内的成员
  4. zrangebyscore keymax min [withscores] [limit] 通过分数返回有序集合指定区间内的成员,返回的是按照指定score区间排序的member
  5. zrevrangebyscore key max min [withscores] [limit] 返回有序集中指定分数区间内的成员,分数从高到低排序
  6. zrem key member [member ...]移除有序集合中的一个或多个成员
  7. zcard key 获取有序集合中的个数
  8. zcount key 计算有序集合中指定分数区间的成员数量
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd k1 6 v1
(integer) 1
127.0.0.1:6379> zadd k1 5 v2
(integer) 1
127.0.0.1:6379> zadd k1 4 v3
(integer) 1
127.0.0.1:6379> zadd k1 3 v4
(integer) 1
127.0.0.1:6379> zadd k1 2 v5
(integer) 1
127.0.0.1:6379> zadd k1 1 v6
(integer) 1
127.0.0.1:6379> zrange k1 0 -1    #按照score的大小,返回从小到大排序的全部元素
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrange k1 0 3     #按照score的大小,只返回第0个到第3个元素
1) "v6"
2) "v5"
3) "v4"
4) "v3"
127.0.0.1:6379> zrevrange k1 0 -1   #逆序返回有序集中,指定区间内的成员
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379> 
127.0.0.1:6379> zrangebyscore k1 0 6    #按照score的大小,只返回score大于0小于6的元素
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrangebyscore k1 0 4   #按照score的大小,只返回score大于0小于4的元素
1) "v6"
2) "v5"
3) "v4"
4) "v3"
127.0.0.1:6379> zrevrangebyscore k1 +inf -inf   #按照score的大小排序,逆序返回score大于负无穷小于正无穷的元素
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379> zrevrange k1 0 -1   # 逆序返回有序集中,指定成员个数区间内的成员
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
127.0.0.1:6379> zrange k1 0 -1    #返回有序集中,指定成员个数区间内的成员
1) "v6"
2) "v5"
3) "v4"
4) "v3"
5) "v2"
6) "v1"
127.0.0.1:6379> zrem k1 v3   # 删除有序集中指定member成员
(integer) 1
127.0.0.1:6379> zrange k1 0 -1
1) "v6"
2) "v5"
3) "v4"
4) "v2"
5) "v1"
127.0.0.1:6379> zcard k1   #获取有序集合中的个数
(integer) 5
127.0.0.1:6379> zcount k1 1 4  # 计算有序集合中指定分数区间的成员数量。
(integer) 3
127.0.0.1:6379> 

结论

  • 使用场景:成绩排序、权重判断、排行榜

参考1-菜鸟

参考2-官网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值