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的可以使用该数据结构。
对不起,这篇文章暂时关闭评论。