做一个消息提示,问题如下:如果系统给所有用户推送了一条站内消息,如何区分用户是否已读,从而实现取消红点或具体未读消息数量,总不可能所有消息全部放在一个表吧,那如果有1万个用户,同样的消息要发1万条,如果是数据库的话,长久下来,负担太大了。
1、内外总条数的提醒记录
使用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)
2、每条记录的读取状态
redis hash中设 unread_msg_detail,键为user_id,值为未读消息拼接, 已读时找到对应记录剔除掉。
两种我觉得在存入过程中可能会耗费较多时间,不知道还有没更好的数据结构
如有更好方案请指正