Redis實現(xiàn)用戶關注功能

最近項目要涉及到粉絲關注問題,權衡再三還是使用Redis實現(xiàn)比較方便,使用Redis的有序集合可以做到根據(jù)關注的時間有序的取出列表,假設我的ID是me,別人的ID是other.

添加關注

添加關注分為兩步:

  1. 將對方id添加到自己的關注列表中;
    shell Redis::ZADD("me:follow", time(), other)
  2. 將自己的id添加到對方的粉絲列表中:
    shell Redis::ZADD("other:fans", time(), me)

取消關注

取消關注同樣分為兩步:

  1. 將對方id從自己的關注列表中移除;
    shell Redis::ZREM("me:follow", other)
  2. 將自己的id從對方的粉絲列表中移除:
    shell Redis::ZREM("other:fans", me)

關注列表

  1. 查看我的關注列表:
    shell Redis::ZRANGE("me:follow", 0 , -1)
  2. 查看別人的把id換掉就可以
    shell Redis::ZRANGE("other:follow", 0 , -1)

粉絲列表

  1. 查看我的粉絲列表:
    shell Redis::ZRANGE("me:fans", 0 , -1)
  2. 查看別人的把id換掉就可以
    shell Redis::ZRANGE("other:fans", 0 , -1)

人物關系

  1. 我單向關注他

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

shell Redis::ZSCORE("me:fans", other) #未返回分數(shù)
shell Redis::ZSCORE("me:follow", other) #返回分數(shù)

  1. 他單向關注我

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

shell Redis::ZSCORE("other:fans", me) #未返回分數(shù)
shell Redis::ZSCORE("other:follow", me) #返回分數(shù)

  1. 是否互粉

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

shell Redis::ZSCORE("me:fans", other) #返回分數(shù)
shell Redis::ZSCORE("me:follow", other) #返回分數(shù)

數(shù)量相關

  1. 我的關注數(shù)
    shell Redis::ZCARD("me:follow"); #返回數(shù)量
  2. 我的粉絲數(shù)
    shell Redis::ZCARD("me:fans"); #返回數(shù)量

排序取出所有的人

  1. 根據(jù)關注的時間倒敘取出用戶的id
    shell Redis::ZREVRANGE("me:fans", 0, -1, TRUE); #倒序取值
  2. 根據(jù)關注時間順序取出用戶的id
    shell Redis::ZRANGE("me:fans", 0, -1, TRUE); #順序取值
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容