Redis数据类型之有序集合—zset

Redis数据类型之有序集合—zset

1、概念

1、Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
.
2、不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序,相当于是一个进行了排序的链表。
.
3、有序集合的成员是唯一的,但分数(score)却可以重复。
.
4、集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

2、常用命令

1、zadd key-name score member [score member …] —— 将带有分值的成员添加到 HSET 中
.
2、zrem key-name member [member …] —— 移除给定成员,并返回移除的数量
.
3、zcard key-name —— 返回有序集合包含的成员数量
.
4、zincrby key-name increment member —— 将 member 成员的分值(score)加上 increment
.
5、zcount key-name min max —— 返回分值介于 min(包含)和 max(包含)之间的成员数量
.
6、zrank key-name member —— 返回成员 member 在有序集合中的排名(从 0 开始)
.
7、zscore key-name member —— 返回成员 member 的分值
.
8、zrange key-name start stop [WITHSCORES] —— 返回排名位于 start 和 stop 之间的成员

127.0.0.1:6379> zadd class 100 admin 99 dev 98 se 
(integer) 3
127.0.0.1:6379> zcard class
(integer) 3
127.0.0.1:6379> zrange class 0 -1   //查询class 集合所有成员
1) "se"
2) "dev"
3) "admin"
127.0.0.1:6379> zscore class admin  //返回成员admin的分数
"100"
127.0.0.1:6379> zcount class 99 100  //查询 99 - 100的成员个数
(integer) 2
127.0.0.1:6379> zrem class admin dev  //删除class 集合的 admin 与 dev
(integer) 2
127.0.0.1:6379> zrange class 0 -1
1) "se"
127.0.0.1:6379> zincrby class 2 se
"100"
127.0.0.1:6379> zadd class 100 admin 97 dev
(integer) 2
127.0.0.1:6379> zrank class admin  //返回admin在集合中的排名
(integer) 1
127.0.0.1:6379> zrank class dev
(integer) 0
127.0.0.1:6379> zrank class se
(integer) 2
127.0.0.1:6379> zrange class 0 -1
1) "dev"
2) "admin"
3) "se"

3、高级命令

1、zrevrank key-name member —— 返回成员member的排名 (逆序,从大到小)
.
2、zrevrange key-name start stop [WITHSCORES] —— 返回给定排名范围内成员(逆序)
.
3、zrangebyscroe key min max [ WITHSCORES ] [LIMIE offset count] —— 返回分值介于 min 和 max 之间的所有成员
.
4、zrevrangebyscore key max min [WITHSCORES] [LIMIE offset count] —— 返回分值介于 min 和 max 之间的所有成员,并按照分值从小到大排序
.
5、zremrangebyrank key start stop —— 移除有序集合中排名在 start 和 stop 的
.
6、zremrangebyscore key min max —— 移除有序集合中分值在 min 和 max 的
.
7、zinterstore dest-key key-count key [ key … ] [WEIGHTS weight] [weight …]] [AGGREGATE SUM|MIN|MAX] —— 对 HSET 执行类似于集合的交集运算
.
8、zunionstore dest-key key-count key [ key … ] [WEIGHTS weight] [weight …]] [AGGREGATE SUM|MIN|MAX] —— 对 HSET 执行类似于集合的并集运算

127.0.0.1:6379> zrevrank class admin
(integer) 1
127.0.0.1:6379> zrevrange class 0 -1
1) "se"
2) "admin"
3) "dev"
127.0.0.1:6379> zrangebyscore class 95 100  //查询 class 集合里面 95 - 100之间的成员
1) "dev"
2) "admin"
3) "se"
127.0.0.1:6379> zrevrangebyscore class 100 95 //返回 class 集合里面 100- 95之间的成员,按分数从小到大排序
1) "se"
2) "admin"
3) "dev"
127.0.0.1:6379> zremrangebyrank class 0 -1
(integer) 3
127.0.0.1:6379> zrevrange class 0 -1
(empty list or set)
127.0.0.1:6379> zadd class 95 admin 93 dev 90 k
(integer) 3
127.0.0.1:6379> zremrangebyscore test 90 100
(integer) 0
127.0.0.1:6379> zremrangebyscore class 90 100
(integer) 3
127.0.0.1:6379> zadd test 5 a 6 b 9 c
(integer) 3
127.0.0.1:6379> zadd test2 5 a 6 b 8 k
(integer) 3
127.0.0.1:6379> zinterstore jiaoji 2 test test2
(integer) 2
127.0.0.1:6379> zrevrange jiaoji 0 -1
1) "b"
2) "a"
127.0.0.1:6379> zunionstore bingji 5 test test2 whight 2 3
(integer) 4
127.0.0.1:6379> zrevrange bingji 0 -1
1) "b"
2) "a"
3) "c"
4) "k"

4、redis实现文章访问量的排序:

1、zrevrangebyscore 按照分值从大到小排序
2、zrangebyscore 返回分值介于 min 和 max 之间的所有成员(从小到大)、
3、zrevrange 返回给定排名范围内成员(逆序)

注意:
1、相同元素不同分数,会将当前成员的分数更新,
2、相同分数不同元素,能添加进去,并且可以正常排序

下一章:Redis五大数据类型详解—hash

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值