Redis實現關注關係

來源:互聯網
上載者:User

標籤:redis

最近使用關係型資料庫實現了使用者之間的關注,於是思考換一種思路,使用Redis實現使用者之間的關注關係  。
綜合考慮了一下Redis的幾種資料結構後,覺得可以用集合實現一下。

假設“我”的ID是1,“別人”的ID是2。

一、添加關注

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

SADD 1:follow 2SADD 2:fans 1
二、取消追蹤

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

SREM 1:follow 2SREM 2:fans 1
三、關注列表

查看我的關注清單列表:

SMEMBERS 1:follow

查看別人的把id換掉就可以

四、粉絲列表

查看我的粉絲列表:

SMEMBERS 2:fans

查看別人的把id換掉就可以

五、人物關係5.1 我單向關注他

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

SISMEMBER 1:follow 2  #trueSISMEMBER 1:fans 2    #false
5.2 他單向關注我

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

SISMEMBER 1:follow 2  #falseSISMEMBER 1:fans 2    #true
5.3 我和某人是否互粉

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

SISMEMBER 1:follow 2  #trueSISMEMBER 1:fans 2    #true

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

六、我的互粉

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

SINTER 1:follow 1:fans
七、共同關注

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

SINTER 1:follow 2:follow
八、數量相關8.1 我的關注清單數
SCARD 1:follow
8.2 我的粉絲數
SCARD 1:fans
九、問題

目前存在的問題是,我的關注清單列表 & 我的粉絲列表,無法做到按關注時間排序,終端下顯示是結果按ID正序排列的。
考慮的解決方案是添加關注時同時存一份有序集合,關注時的時間戳記是score。

ZADD 1:follow 1457871625 2ZADD 2:fans 1457871625 1

那麼我的關注清單列表是:

ZREVRANGE 1:follow 0 -1

同時,ZREVRANGE查詢時的索引可以作為分頁遊標,基本解決目前的問題。


Redis實現關注關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.