利用Redis Sorted Set实现排行榜功能

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

原文地址:https://www.cnblogs.com/it-deepinmind/p/14482528.html