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????#false5.2 他單向關注我
他單向關注我,要同時滿足兩個條件:1、我的關注列表中沒有他(或他的粉絲列表中沒有我);2、我的粉絲列表中有他(或他的關注列表中有我)。
SISMEMBER?1:follow?2??#falseSISMEMBER?1:fans?2????#true5.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:follow8.2 我的粉絲數
SCARD?1:fans九、問題
目前存在的問題是,我的關注列表 & 我的粉絲列表,無法做到按關注時間排序,終端下顯示是結果按ID正序排列的。
考慮的解決方案是添加關注時同時存一份有序集合,關注時的時間戳是score。
那么我的關注列表是:
ZREVRANGE?1:follow?0?-1同時,ZREVRANGE查詢時的索引可以作為分頁游標,基本解決目前的問題。
轉載于:https://blog.51cto.com/11561130/1770685
總結
以上是生活随笔為你收集整理的Redis实现关注关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: view技术简单了解
- 下一篇: 如此接私活So easy:给开发者,PM