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
