在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)/ 標(biāo)記用戶(hù)是否已讀

標(biāo)記用戶(hù)是否已讀

我現(xiàn)在有一條消息發(fā)布出去,假如有一萬(wàn)人同時(shí)接收到,我現(xiàn)在在數(shù)據(jù)庫(kù) 增加了一個(gè) 字段 存儲(chǔ)已讀過(guò)的用戶(hù) 的用戶(hù)名 用逗號(hào)隔開(kāi), 假如這么多用戶(hù)的話(huà) 那么 這個(gè)標(biāo)記字段長(zhǎng)度就得非常長(zhǎng)了 這樣就不合理了。 所以我想問(wèn)的是有沒(méi)什么比較好的方案 對(duì)于同一條消息 標(biāo)記當(dāng)前用戶(hù)是否已讀過(guò)

回答
編輯回答
真難過(guò)
2018年6月21日 17:51
編輯回答
薄荷綠

Redis

  1. 消息id作為key存 true 表示未讀
  2. 讀消息的時(shí)候吧這個(gè) key 刪掉
2018年2月26日 15:49
編輯回答
愛(ài)礙唉

你可以新建一個(gè)表,用來(lái)存儲(chǔ)對(duì)這條信息已讀和未讀的信息。
簡(jiǎn)單幫你設(shè)計(jì)一個(gè)一下這個(gè)表如下:
圖片描述

假如這條信息是2017-11-29T12-12-12這個(gè)時(shí)間點(diǎn)發(fā)出的,通過(guò)比較用戶(hù)讀這個(gè)消息的時(shí)間(存儲(chǔ)在上表的READ_DATE)這個(gè)字段里,如果用戶(hù)讀取這個(gè)消息的時(shí)間大于這個(gè)消息發(fā)出的時(shí)間,就證明讀過(guò)這個(gè)消息,反之沒(méi)有讀過(guò)。

2018年9月5日 20:48
編輯回答
玩控

你可以設(shè)計(jì)一張 user_id msg_id status的表,存儲(chǔ)相應(yīng)的狀態(tài)。如果數(shù)據(jù)庫(kù)壓力大,可以考慮用redis緩存+本地緩存解決。

2018年9月15日 00:14
編輯回答
未命名

可以用bitmap來(lái)存儲(chǔ),把用戶(hù)id 減去最小的用戶(hù)id + 1得出的id,在相應(yīng)的位上用0、1表示是否已讀就哦了

2018年8月30日 03:13
編輯回答
筱饞貓

如果用戶(hù)量不大的話(huà),可以設(shè)計(jì)一張用戶(hù)消息表,每給一個(gè)用戶(hù)發(fā)一條消息就存儲(chǔ)到里面,已讀未讀就一個(gè)字段標(biāo)識(shí)就可以了。用戶(hù)量大的話(huà)會(huì)造成很大的存儲(chǔ)浪費(fèi),可以記錄一張消息-用戶(hù)表,里面只記錄讀了這條消息的用戶(hù),只不過(guò)在顯示某個(gè)用戶(hù)消息的時(shí)候需要做點(diǎn)處理。

2017年12月12日 09:05
編輯回答
深記你

系統(tǒng)消息和發(fā)給用戶(hù)的消息應(yīng)該存儲(chǔ)在兩個(gè)不同的表中呀。用戶(hù)是否已讀,是用戶(hù)的行為,不能附加到系統(tǒng)上去。根據(jù)你這個(gè)需求,當(dāng)系統(tǒng)新生成一條消息,在sys_news的表中存儲(chǔ)一條記錄,這個(gè)表可以很簡(jiǎn)單,有個(gè)id,有個(gè)內(nèi)容就行。然后消息發(fā)送給用戶(hù),分發(fā)給那個(gè)用戶(hù),用戶(hù)的消息表中user_news中就要增加一條記錄。用戶(hù)消息表要有用戶(hù)的id,消息的id,消息狀態(tài)(是否已讀)。當(dāng)用戶(hù)讀了,根據(jù)用戶(hù)的id和消息的id改用戶(hù)消息表的狀態(tài)就可以了。

2018年2月1日 22:22