IM聊天时,未读信息如何处理比较高效?

答案:每个聊天对象用一个字段去记录最后已读消息id。
拿用户a与好友f1举例子,首次加载最近联系人时读取f1的最后未读消息ID。
如果最新消息为空,则读取最后一条消息ID,如果不存在则写入-1,下次读取判断为-1则未读数量为0;
如果存在最后一条消息ID,取用数据库去计算这个ID之后的消息数量。
当打开聊天框时,可以暴力的将当前好友的最后未读消息ID改为最新的消息ID。
当然如果你想做到每一页消息的未读数量,以及跟踪上次查阅到哪个位置,就要扩展字段了。
用一个文本字段取记录已读消息的区间,字段名:readMsgArea。
格式如:[{fromMsgId:123, toMsgId: 135}, {fromMsgId:256, toMsgId: 352}]
这样子的两个区间代表的是没有查阅的消息区间,数量就是id之间的消息总计;
每次翻页时减少toMsgId的Id,一直翻页直到将这个区间移除。过程和体验就比较繁琐,对用户操作反而不太友好。