鍍金池/ 問答/Java  數(shù)據(jù)庫/ 標記用戶是否已讀

標記用戶是否已讀

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

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

Redis

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

你可以新建一個表,用來存儲對這條信息已讀和未讀的信息。
簡單幫你設(shè)計一個一下這個表如下:
圖片描述

假如這條信息是2017-11-29T12-12-12這個時間點發(fā)出的,通過比較用戶讀這個消息的時間(存儲在上表的READ_DATE)這個字段里,如果用戶讀取這個消息的時間大于這個消息發(fā)出的時間,就證明讀過這個消息,反之沒有讀過。

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

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

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

可以用bitmap來存儲,把用戶id 減去最小的用戶id + 1得出的id,在相應的位上用0、1表示是否已讀就哦了

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

如果用戶量不大的話,可以設(shè)計一張用戶消息表,每給一個用戶發(fā)一條消息就存儲到里面,已讀未讀就一個字段標識就可以了。用戶量大的話會造成很大的存儲浪費,可以記錄一張消息-用戶表,里面只記錄讀了這條消息的用戶,只不過在顯示某個用戶消息的時候需要做點處理。

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

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

2018年2月1日 22:22