随着移动互联网的不断发展,推送和消息中心成了很多APP必备的一个功能。
而一般大家在设计消息中心的时候,会遇到这种判断用户是不是已读的情况。对于发件人,他想知道自己的消息是不是被所有人都阅读了,还有哪些人没有看到这个消息。对于收件人来说,偶想要知道偶有哪些是未读消息,哪些是已读消息。
为了要保证每个用户看到的消息是独立的,相互不影响的,将是否已读放在消息表上自然是不可行的,所以,会有一个链表,用来关联用户表和消息表,标注消息是否已读。
当用户需要删除消息时,也只是删除用户消息表的数据,对于消息表的数据没有影响。
而当发送人想要拉回消息时,也是将消息的状态改变,然后删除所有未读用户的用户消息表数据即可。
这样,一个消息是否已读,就可以通过用户消息表中的已读和未读标记进行统计了。
如果大家还想要统计已读的数量,未读的数量,还可以将消息ID和已读未读数量缓存到Redis中,每当有用户阅读消息时,已读数量+1,未读数量-1即可。