Redis實現關注關係

2021-07-11 15:27:09 字數 1657 閱讀 7930

。綜合考慮了一下redis的幾種資料結構後,覺得可以用集合實現一下。

假設「我」的id是1,「別人」的id是2。

新增關注分為兩步:1、將對方id新增到自己的關注列表中;2、將自己的id新增到對方的粉絲列表中:

sadd 1:follow 2

sadd 2:fans 1

取消關注同樣分為兩步:1、將對方id從自己的關注列表中移除;2、將自己的id從對方的粉絲列表中移除:

srem 1:follow 2

srem 2:fans 1

檢視我的關注列表:

smembers 1:follow
檢視別人的把id換掉就可以

檢視我的粉絲列表:

smembers 2:fans
檢視別人的把id換掉就可以

我單向關注他,要同時滿足兩個條件:1、我的關注列表中他(或他的粉絲列表中我);2、我的粉絲列表中沒有他(或他的關注列表中沒有我)。

sismember 1:follow 2  #true

sismember 1:fans 2 #false

他單向關注我,要同時滿足兩個條件:1、我的關注列表中沒有他(或他的粉絲列表中沒有我);2、我的粉絲列表中他(或他的關注列表中我)。

sismember 1:follow 2  #false

sismember 1:fans 2 #true

我和某人是否互粉,要同時滿足兩個條件:1、我的關注列表中有他(或他的粉絲列表中有我);2、我的粉絲列表中有他(或他的關注列表中有我)。同時成立才為互粉。

sismember 1:follow 2  #true

sismember 1:fans 2 #true

互粉的關係是互相的,也可以反過來查。

查詢和我互粉的人,實際是對我的關注和我的粉絲求交集

sinter 1:follow 1:fans
查詢1和2的共同關注,實際是1的關注和2的關注求交集

sinter 1:follow 2:follow
scard 1:follow
scard 1:fans
目前存在的問題是,我的關注列表 & 我的粉絲列表,無法做到按關注時間排序,終端下顯示是結果按id正序排列的。

考慮的解決方案是新增關注時同時存乙份有序集合,關注時的時間戳是score。

zadd 1:follow 1457871625 2

zadd 2:fans 1457871625 1

那麼我的關注列表是:

zrevrange 1:follow 0 -1
同時,zrevrange查詢時的索引可以作為分頁游標,基本解決目前的問題。

redis 集合 好友關注

集合命令 a檢視b 共同關注 ab交集 sinter 或 sinterestrore 我 a 關注的人也關注b 迴圈遍歷我關注的人 是否有關注b sismember 可能認識的人 ab差集 sdiff 或 sdiffstrore 然後排除掉自己 srem redis 的 set 是 string 型...

SQL儲存過程實現,關注與取消關注功能

create proc attention id int,使用者id uid varchar 2000 需要操作的使用者id type int 操作型別 1 取消關注 2 關注 as begin declare data varchar 2000 資料來源 split varchar 2 分割符 v...

關注,粉絲關係的資料庫設計

主要就前三個字段,當然也可以是4個字段 from user id to user id 互粉狀態both status rel type a b yes a關注b,a成為b的粉絲 同時需要在統計資料裡面加1 b a yes b關注a,b成為了a的粉絲 同時需要在統計資料裡面加1,需要檢測,a是不是已...