APP社交類項(xiàng)目設(shè)計(jì)之七好友列表功能設(shè)計(jì)

?需求:社交APP用戶的好友關(guān)系維護(hù)

? ? ?現(xiàn)有環(huán)境:用戶基本信息表t_userbase,環(huán)信通信接口

? ? ?設(shè)計(jì)方案:

? ? ? 方案一:由后臺(tái)維護(hù)好友關(guān)系

? ? ? 實(shí)施細(xì)則:

? ? ? (1)后臺(tái)新建動(dòng)態(tài)關(guān)系表t_fans,里面四個(gè)字段,id(唯一索引),userid(本用戶ID),fansid(好友用戶ID),以及followTime(創(chuàng)建關(guān)系時(shí)間)

?

? ? ? ? ? ? 當(dāng)用戶A添加用戶B(且用戶B默認(rèn)允許被別人添加)為好友時(shí),如下代碼邏輯

? ? ? ? (2)? 在表中插入兩條記錄,1. userId A? fansId B? ? 2. userId B? fansId A,形成雙向關(guān)系鏈,這樣當(dāng)后臺(tái)查詢該好友的列表,只要判斷和A產(chǎn)生聯(lián)系的對(duì)象是否有雙向鏈,如果有則羅列出來,

/**

* 添加好友 雙向

* @param fromUserId?? ?發(fā)起刪除的用戶ID

* @param toUserId?? ??? ?被刪除的用戶ID

*/

@Override

@Transactional

public void insert(String fromuid,String touid) {

//被添加人

User fansUser = ?userMapper.selectByPrimaryKey(touid);

//添加人

User user =userMapper.selectByPrimaryKey(fromuid);

//正向加好友

Fans fans = new Fans();

fans.setId(UUIDUtils.getUUID());

fans.setFollowTime(STDateUtils.getCurrentTime());

fans.setUserId(touid);

fans.setFansId(fromuid);

fansMapper.insert(fans);

//反向互加好友

fans.setId(UUIDUtils.getUUID());

fans.setUserId(fromuid);

fans.setFansId(touid);

fansMapper.insert(fans);

//環(huán)信添加好友

hUserService.addContacts(fansUser.getHusername(),user.getHusername());

hUserService.addContacts(user.getHusername(),fansUser.getHusername());

}

? ? ? (3)優(yōu)點(diǎn):后臺(tái)維護(hù)好友關(guān)系,對(duì)用戶資源集中管理,擁有大量的寶貴數(shù)據(jù)源,且能快捷定位問題

? ? ? ? ? ? ? ? 缺點(diǎn):對(duì)后臺(tái)性能要求頗高,需要考慮大并發(fā)以及分布式+REDIS+分表分庫。對(duì)于中小型項(xiàng)目方案對(duì)硬件和軟件要求高

? ? ? 方案二:由環(huán)信維護(hù)好友關(guān)系,后臺(tái)進(jìn)行管理

? ? ? 實(shí)施細(xì)則:

? ? ? ?(1)好友關(guān)系存儲(chǔ)在環(huán)信中,只涉及好友基本數(shù)據(jù)(好友的環(huán)信ID)

? ? ? ?(2)APP前端查詢好友時(shí),調(diào)用后臺(tái)接口通信,后臺(tái)調(diào)用環(huán)信接口返回好友基本數(shù)據(jù)環(huán)信ID

? ? ? ?(3)后臺(tái)對(duì)環(huán)信ID進(jìn)行數(shù)據(jù)庫緩存EHCACHE查詢命中,可以列表式查詢到好友詳細(xì)信息(包括昵稱,頭像,地區(qū),性別,簽名等)

? ? ? ? (4)后臺(tái)將數(shù)據(jù)返回給前臺(tái)

? ? ? ? (5)前臺(tái)將列表信息展示成界面

? ? ? ? ?優(yōu)點(diǎn):對(duì)于服務(wù)器維護(hù)基本是輕量級(jí),只要加入ehcache,如果分布式考慮多加入redis即可。

? ? ? ? ?缺點(diǎn):后臺(tái)無法知曉用戶的關(guān)系圈

? ? ? ? 綜上:比較兩種方案,選擇方案二

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容