redis里zset命令的用法举例(有序集合)

假设的场景为,幼儿园老师给小朋友奖励红花或者贴纸,然后统计他们获得贴纸的情况

#tom第一天获得5个贴纸
> zadd day1 5 tom
(integer) 1
#jacy第一天获得2个贴纸
> zadd day1 2 jack
(integer) 1
#merry第一天获得8个贴纸
> zadd day 8 merry
(integer) 1
#jacy第一天又多增加获得1个贴纸
> zincrby day1 1 jack
"3"
#查看jack的排名
> zrank day1 jack
(integer) 0
#查看merry的排名
> zrank day1 merry
(integer) 2
#查看所有人的排名
> zrange day1 0 -1
1) "jack"
2) "tom"
3) "merry"
#查看获得5到9个之间的小朋友的名单
> zrangebyscore day1 5 9
1) "tom"
2) "merry"
#查看day1总共有多少个人
> zcard day1
(integer) 3
#jack第二天又获得了3个贴纸
> zadd day2 3 jack
(integer) 1
#统计day1,day2两天总共获得的贴纸排名,并且把结果放到union:day1andday2这个key里面
> zunionstore union:day1andday2 2 day1 day2 
(integer) 3
#统计排名并显示他们获得贴纸的个数
> zrangebyscore union:day1andday2 0 1000 withscores
1) "tom"
2) "5"
3) "jack"
4) "6"
5) "merry"
6) "8"

其它的使用场景:
1:统计日活
2:统计最近24小时的收益等等
3:打赏日榜
4:爬升榜
5:还有个特殊的应用,可以把score设置成过期时间,根据socre去定制清理一些东西

实现方式:
sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。

zset(sorted set)操作的命令

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

zrem(key, member) :删除名称为key的zset中的元素member

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

zrank(key, member) :返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

zcard统计个数

zrevrank(key, member) :返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若没有member元素,返回“nil”

zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素

zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素

zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素 zcard(key):返回名称为key的zset的基数 zscore(key, element):返回名称为key的zset中元素element的score zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素 zremrangebyscore(key, min, max) :删除名称为key的zset中score >= min且score <= max的所有元素

zunionstore / zinterstore(dstkeyN, key1,…,keyN, WEIGHTS w1,…wN, AGGREGATE SUM|MIN|MAX):对N个zset求并集和交集,并将最后的集合保存在dstkeyN中。对于集合中每一个元素的score,在进行AGGREGATE运算前,都要乘以对于的WEIGHT参数。如果没有提供WEIGHT,默认为1。默认的AGGREGATE是SUM,即结果集合中元素的score是所有集合对应元素进行SUM运算的值,而MIN和MAX是指,结果集合中元素的score是所有集合对应元素中最小值和最大值。

标签: none

添加新评论