IM系统设计之消息存储

IM系统设计之消息存储

项目地址:git@github.com:muyixiaoxi/Link.git

消息存储结构

消息存储结构如下图所示
在这里插入图片描述

当用户A向用户B发送一条消息时

  1. 将消息发送给 server
  2. server 将消息进行持久化
  3. 判断用户B是否在线,如果在线直接转发;如果离线,将离线消息存储到B的离线消息存储库里;如果此时B为离线状态,那么当B下次登录时拉取离线消息存储库即可同步消息。
  4. 将消息持久化到客户端本地(前端的工作)

消息持久库和离线消息存储库我分别使用的是:MySQL、Redis。众所周知,Redis是基于内存的,那么当Redis宕机后,离线消息就会丢失。

这里有两种解决思路,两种思路都需要记录消息持久库里面记录消息的已读状态

思路一:

  1. 用户上线后,拉取离线消息,并将其在持久库里面的状态修改为已读
  2. 用户上线后,拉取离线消息,如果离线消息为空,则去持久库里同步未读的消息

思路二:
当Redis宕机后,管理员手动拉取

如果有更好的方法,欢迎大家在评论区讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值