亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有大佬遇到過這個問題嗎:后臺如何區分已讀消息和未讀消息,java寫的后臺

有大佬遇到過這個問題嗎:后臺如何區分已讀消息和未讀消息,java寫的后臺

Helenr 2019-06-09 09:51:24
如題,想做一個消息提示,具體問題如下如果系統給所有用戶推送了一條站內消息,如何區分用戶是否已讀,從而實現取消紅點或具體未讀消息數量,總不可能所有消息全部放在一個表吧,那如果有1萬個用戶,那不是同樣的消息要發1萬條,如果是數據庫的話,長久下來,負擔太大了吧,當然更不可能放在內存中,不然重啟項目,消息就全沒了。所以敢問大佬,有啥好的設計方案,不限數據庫,redis,或者其他工具
查看完整描述

2 回答

?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

如果系統有redis可以這么處理,redis的set保存已經讀取得消息id=messageIdeg:{messageid1,messageid2...}。userid_read_message作為鍵(每個用戶存一條,保存每個用戶已經讀取的所有messageid)最終既是這種結構your_user_id_read_message:{messageid1,messageid2...}那么此時已讀消息數量和具體消息的id可知,消息自然可知直接用id查表。
沒有redis直接用數據庫也行,反正建一張表記錄用于已經讀取的消息id列表。拼接成字符串也好直接存JSON格式的也好,都行。目的是通過用戶id能獲取到該用戶已經讀取的消息ID。每個用戶的每條已讀消息存一條記錄這樣最好,直接通過sql就可以把這個已讀未讀,以及具體消息內容都能查出來。
站內信在數據庫建表common_notice_message用于保存具體的站內信,一條就算你發10W個人也指用存一條。那么notin第一步中的已讀messageid就可以查到所有未讀的消息,自然數量和具體內容也就出來了。當用戶讀取了未讀消息(web或者app上調用了讀具體消息的接口)直接在redis的已讀消息id的set中新增一條記錄。
                            
查看完整回答
反對 回復 2019-06-09
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

使用redis的hash實現:
hash的名稱unread_msg_count
hash的鍵user_id
hash的值未讀數
如果有新消息可以使用hincrby(unread_msg_count,user_id,1)來處理
用戶已讀時,hincrby(unread_msg_count,user_id,-1)來減1或者hdel(unread_msg_count,user_id)
性能和持久性要求都可以保證
                            
查看完整回答
反對 回復 2019-06-09
  • 2 回答
  • 0 關注
  • 2261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號