。綜合考慮了一下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是不是已...