利用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM