微博案例-互相關(guān)注

個人認(rèn)為這個案例還是很經(jīng)典的

  • 這個案例很好的實(shí)現(xiàn)了叙凡,如何記錄我關(guān)注了哪些人笆焰,哪些人關(guān)注了我
  • 用set 結(jié)構(gòu)進(jìn)行去重, 關(guān)鍵是當(dāng)我關(guān)注別人的時候如何存儲
    上代碼:
  /**
     * 關(guān)注別人
     * @param userId 自己
     * @param followUserId 你要關(guān)注的人
     */
    public void follow(long userId, long followUserId){

        //我關(guān)注了誰 需要在我關(guān)注的人的 集合中增加一條記錄
        jedis.sadd("user::" + followUserId +"::followers",String.valueOf(userId));
        //我關(guān)注人的集合
        jedis.sadd("user::" +userId + "::follow_users",String.valueOf(followUserId));
    }
  • 以上代碼中一個方法內(nèi),存儲了兩個SET哎榴,那么這兩個set是干嘛的那
    試想我們?nèi)绻挥胷edis,用數(shù)據(jù)庫存儲的話僵蛛,是不是需要設(shè)計數(shù)據(jù)庫表尚蝌,那么我們就會這樣設(shè)計,
    一張是用戶表充尉,記錄用戶基礎(chǔ)信息
    一張是用戶關(guān)注明細(xì)飘言,記錄誰關(guān)注了此用戶,字段為userId驼侠,follwUserId
    我們在檢索的時候查詢 我被誰關(guān)注了 就直接select * from 關(guān)系表 where userId= 自己
    那么檢索我關(guān)注了誰那姿鸿? 就是select * from 關(guān)系表 where follwUserId= 自己
    是不是很簡單,但是這樣每次查庫性能是不行的倒源,所以我么要將這些數(shù)據(jù)提前聚合到緩存中:
  • 也就出現(xiàn)了 上段代碼中的:兩個set
  • 一個set用來存儲被關(guān)注的人的集合中插入誰關(guān)注了他苛预,誰那,就是我笋熬,key為我要關(guān)注的人的id热某,"user::" + followUserId +"::followers" value:為 自己
  • 一個set用來存儲我關(guān)注了哪些人的集合, 那么key 為自己的id胳螟, value為你所關(guān)注的人

取消關(guān)注

/**
    * 取消關(guān)注
    * @param userId
    * @param followUserId
    */
   public void unfollow(long userId, long followUserId){
       jedis.srem("user::" + followUserId +"::followers",String.valueOf(userId));
       jedis.srem("user::" +userId + "::follow_users",String.valueOf(followUserId));
   }

查看哪些人關(guān)注了我

/**
     * 查看有哪些人關(guān)注了我
     * @param userId
     * @return
     */
    public Set<String> getFollowers(long userId){
        return jedis.smembers("user::" + userId +"::followers");
    }

    /**
     * 查看我關(guān)注了哪些人
     * @param userId
     * @return
     */
    public Set<String> getFollowUsers(long userId){
        return jedis.smembers("user::" +userId + "::follow_users");
    }
    /**
     * 查看自己關(guān)注的人數(shù)
     * @param userId
     * @return
     */
    public long getFollowUsersCount(long userId) {
        return jedis.scard("user::" + userId + "::follow_users");
    }
    /**
     * 查看自己關(guān)注的人數(shù)
     * @param userId
     * @return
     */
    public long getFollowersCount(long userId){
        return jedis.scard("user::" +userId + "::follow_users");
    }

    /**
     * 獲取用戶跟其他用戶之間共同關(guān)注的人有哪些
     * @param userId
     * @param otherUserId
     * @return
     */
    public Set<String> getSameFollowUsers(long userId, long otherUserId){
       return jedis.sinter("user::" +userId + "::follow_users",
               "user::" +otherUserId + "::follow_users");
    }

   /**
     * 獲取給我推薦的可關(guān)注人
     * 我關(guān)注的某個好友關(guān)注的一些人昔馋,我沒關(guān)注那些人,此時推薦那些人給我
     * @param userId
     * @param otherUserId
     * @return
     */
    public Set<String> getRecommendFollowUsers(long userId, long otherUserId){
        return jedis.sdiff("user::" +userId + "::follow_users",
                "user::" +otherUserId + "::follow_users");
    }

很不錯的案例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺隙,一起剝皮案震驚了整個濱河市绒极,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔬捷,老刑警劉巖垄提,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榔袋,死亡現(xiàn)場離奇詭異,居然都是意外死亡铡俐,警方通過查閱死者的電腦和手機(jī)凰兑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來审丘,“玉大人吏够,你說我怎么就攤上這事√脖ǎ” “怎么了锅知?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脓钾。 經(jīng)常有香客問我售睹,道長,這世上最難降的妖魔是什么可训? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任昌妹,我火速辦了婚禮,結(jié)果婚禮上握截,老公的妹妹穿的比我還像新娘飞崖。我一直安慰自己,他們只是感情好谨胞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布固歪。 她就那樣靜靜地躺著,像睡著了一般畜眨。 火紅的嫁衣襯著肌膚如雪昼牛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天康聂,我揣著相機(jī)與錄音贰健,去河邊找鬼。 笑死恬汁,一個胖子當(dāng)著我的面吹牛伶椿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氓侧,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼脊另,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了约巷?” 一聲冷哼從身側(cè)響起偎痛,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎独郎,沒想到半個月后踩麦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚赡,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年谓谦,在試婚紗的時候發(fā)現(xiàn)自己被綠了贫橙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡反粥,死狀恐怖卢肃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情才顿,我是刑警寧澤莫湘,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站娜膘,受9級特大地震影響逊脯,放射性物質(zhì)發(fā)生泄漏优质。R本人自食惡果不足惜竣贪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巩螃。 院中可真熱鬧演怎,春花似錦、人聲如沸避乏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拍皮。三九已至歹叮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铆帽,已是汗流浹背咆耿。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留爹橱,地道東北人萨螺。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像愧驱,于是被迫代替她去往敵國和親慰技。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評論 2 359