首页 » Redis » Redis学习06之Sorted SET有序集合

Redis学习06之Sorted SET有序集合

今天学习Redis最后一个基本数据结构有序集合,上一节学习总结有记录有序集合是一种可以根据分数排序的SETs,Keys(members)也是唯一的,分数可以重复,值是一种浮点类型的分数,所以常应用于积分和实时排行榜,可见Redis确实是为解决问题而生的,直接开始。

常用命令
ZADD:添加或更新成员
ZREM:移除指定的成员
ZSCORE:获取成员的分值
ZINCRBY:对成员的分值执行自增或自减操作
ZCARD:获取有序集合的大小
ZRANK、ZREVRANK:获取成员在有序集合中的排名
ZRANGE、ZREVRANGE:获取指定索引范围内的成员
ZRANGEBYSCORE、ZREVRANGEBYSCORE:获取指定分值范围内的成员
ZCOUNT:统计指定分值范围内的成员数量
ZRANGEBYSCORE、ZREVRANGEBYSCORE:获取指定分值范围内的成员
ZCOUNT:统计指定分值范围内的成员数量
ZUNIONSTORE、ZINTERSTORE:有序集合的并集运算和交集运算
ZRANGEBYLEX、ZREVRANGEBYLEX:返回指定字典序范围内的成员
ZLEXCOUNT:统计位于字典序指定范围内的成员数量
ZREMRANGEBYLEX:移除位于字典序指定范围内的成员
ZPOPMAX、ZPOPMIN:弹出分值最高和最低的成员
BZPOPMAX、BZPOPMIN:阻塞式最大/最小元素弹出操作

[root@anbob.com ~]# redis-cli
127.0.0.1:6379> zadd book_ranking  10  book1 4 book2 11 book3
(integer) 3
127.0.0.1:6379> zadd book_ranking  18 book1
(integer) 0
127.0.0.1:6379> zcard book_ranking
(integer) 3
127.0.0.1:6379> zrange book_ranking
(error) ERR wrong number of arguments for 'zrange' command
127.0.0.1:6379> zrange book_ranking 0 -1
1) "book2"
2) "book3"
3) "book1"
127.0.0.1:6379> zrange book_ranking 0 -1 withscores
1) "book2"
2) "4"
3) "book3"
4) "11"
5) "book1"
6) "18"
127.0.0.1:6379> zrange book_ranking 1 2 withscores
1) "book3"
2) "11"
3) "book1"
4) "18"
127.0.0.1:6379> zrangebyscore book_ranking 1 10
1) "book2"
127.0.0.1:6379> zrangebyscore book_ranking 10 20
1) "book3"
2) "book1"
127.0.0.1:6379> zrangebyscore book_ranking 10 20 withscores
1) "book3"
2) "11"
3) "book1"
4) "18"
127.0.0.1:6379> zrem book_ranking book1
(integer) 1
127.0.0.1:6379> zrange book_ranking 0 -1
1) "book2"
2) "book3"
127.0.0.1:6379> zadd book_ranking  1000 book9
(integer) 1
127.0.0.1:6379> zadd book_ranking  1000 book8
(integer) 1
127.0.0.1:6379> zadd book_ranking  100 book7
(integer) 1
127.0.0.1:6379> zrange book_ranking 0 -1 withscores
 1) "book2"
 2) "4"
 3) "book3"
 4) "11"
 5) "book7"
 6) "100"
 7) "book8"
 8) "1000"
 9) "book9"
10) "1000"
127.0.0.1:6379> zpopmax book_ranking
1) "book9"
2) "1000"
127.0.0.1:6379> zpopmin book_ranking 2
1) "book2"
2) "4"
3) "book3"
4) "11"
127.0.0.1:6379> zrange book_ranking 0 -1 withscores
1) "book7"
2) "100"
3) "book8"
4) "1000"
127.0.0.1:6379> zincrby book_ranking 1.1 book7
"101.09999999999999"
127.0.0.1:6379> zrange book_ranking 0 -1 withscores
1) "book7"
2) "101.09999999999999"
3) "book8"
4) "1000"
127.0.0.1:6379> zincrby book_ranking -2 book7
"99.099999999999994"

案例

临时配置密码,远程连接
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass redis_pwd
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "redis_pwd"

--file stu_rank.py --
import redis
client = redis.Redis(host='192.168.56.110',password='redis_pwd')
rank_90_100 = client.zrevrange('rank',0,4, withscores=True)
for index,stu in enumerate(rank_90_100):
    print(f'学生编号:{stu[0].decode()} , 分数: {stu[1]}, 排名第: {index+1}')

-- 加些数据
127.0.0.1:6379> zadd rank 10 u1
(integer) 1
127.0.0.1:6379> zadd rank 20 u2
(integer) 1
127.0.0.1:6379> zadd rank 30 u3
(integer) 1
127.0.0.1:6379> zadd rank 40 u4
(integer) 1
127.0.0.1:6379> zadd rank 50 u5
(integer) 1
127.0.0.1:6379> zadd rank 60 u6 70 u7 80 u8 90 u9 99 u99
(integer) 5

--获取排名前5

D:\code>stu_rank.py
学生编号:u99 , 分数: 99.0, 排名第: 1
学生编号:u9 , 分数: 90.0, 排名第: 2
学生编号:u8 , 分数: 80.0, 排名第: 3
学生编号:u7 , 分数: 70.0, 排名第: 4
学生编号:u6 , 分数: 60.0, 排名第: 5

同样有些积分排名的,文章点赞, 以时间为积分控制过期时间的,取top的可以使用该数据结构。

打赏

, ,

对不起,这篇文章暂时关闭评论。