Redis 有序集合(sorted set)
一、向集合中添加(多个)元素和元素分值
ZADD key score1 member1 [ score2 member2] 1. ZADD testkey 1 redis 2. ZADD testkey 2 mysql 3 java
二、遍历集合
ZRANGE key 0 -1 WITHSCORES
ZRANGE testkey 0 -1 WITHSCORES
三、 获取有序集合的成员数
zcard key
zcard testkey
四、 对集合中元素进行加减
Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment
1.可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,
就是让 member 的 score 值减去 5 。
2.当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member
等同于 ZADD key increment member 。
3.当 key 不是有序集类型时,返回一个错误。
4.分数值可以是整数值或双精度浮点数。
ZADD myzset 1 "one" ZADD myzset 2 "two" ZINCRBY myzset 2 "one" ZRANGE myzset 0 -1 WITHSCORES
发现one变成了3
五、返回有序集合中指定成员的索引
ZRANK key member
其中有序集成员按分数值递增(从小到大)顺序排列。
也就是说数值越大,返回的索引越大
red:0> ZADD testkey 1 redis "1" red:0>ZADD testkey 2 mysql 3 java "2" red:0>ZADD testkey 2 mongo 3 tomcat "2" red:0>ZADD testkey 2 mongoDB 4 app
六、按照索引递增递减排序
递增:
red:0> ZRANGE testkey 0 -1 WITHSCORES
//递减
red:0>ZREVRANGE testkey 0 -1 WITHSCORES
ZREVRANGEBYSCORE key +inf -inf # 逆序排列所有成员
red:0>ZREVRANGEBYSCORE testkey +inf -inf
ZREVRANGEBYSCORE testkey 2 1
# 逆序排列值介于 1和 2之间的成员
七、返回一个key在集合中的分数
ZSCORE key member
看完上面的sorted SET,我们试着实现一下点赞功能
7.1 单个用户点赞数实现
每当一个用户给它点赞,记录用户的ID
ZINCRBY wenZhangID 1 userID
取消赞
ZINCRBY wenZhangID -1 userID
当然这里有一个逻辑,一个用户只能点赞并取消
如果要统计一个用户的这篇文章被点赞了多少次,可以直接取里面有多少个成员就可以了
zcard wenZhangID
7.2 点赞排行设计与实现
其实就是再新建一个集合A,里面就存用户ID和点赞数
每当单个用户的点赞数发生变化的时候,同步更新A里面的个人点赞数
然后实时计算top就可以了,比如top100
ZREVRANGE key 0 99 WITHSCORES
————————————————
版权声明:本文为CSDN博主「qq_26249609」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26249609/article/details/103566848