默认

IM开发干货分享:浅谈IM系统中离线消息、历史消息的最佳实践

查看数: 138932 | 评论数: 11 | 收藏 6
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2022-04-18 15:20

正文摘要:

本文由融云技术团队原创分享,原题“IM 消息数据存储结构设计”,为使文章更好理解,内容有修订。 1、引言 在如今的移动互联网时代,IM类产品已是我们生活中不可或缺的组成部分。像微信、钉钉、QQ等是典型的以 IM ...

评论

苏门答腊伟 发表于 9 个月前
我想知道读写扩散怎么组合
li709854423 发表于 2 年前
引用:JackJiang 发表于 2022-05-26 00:52
哪一段说通过MQ进redis的?

消息系统存储离线的过程中,为了不影响整个系统的更为平稳,我们使用了MQ消息队列进行IO解偶。
这里的存储离线不是离线消息吗?难道是说历史消息吗
JackJiang 发表于 2 年前
引用:li709854423 发表于 2022-05-25 20:18
这个我是理解的。但是我看上面说的是。进redis之前要通过MQ去进redis?写一次redis很快吧。还需要用mq去 ...

哪一段说通过MQ进redis的?
li709854423 发表于 2 年前
引用:JackJiang 发表于 2022-05-25 18:34
MQ的作用主要是跟数据库这种慢IO进么解偶,也就是在高性能场景下的销峰去谷,redis主要是为了读写性能。
...

这个我是理解的。但是我看上面说的是。进redis之前要通过MQ去进redis?写一次redis很快吧。还需要用mq去写redis吗
JackJiang 发表于 2 年前
引用:li709854423 发表于 2022-05-25 16:59
离线消息是redis存的话,那怎么让7天前的消息被清掉?比如一个用户8天未登录,每天都有一条,那第一条是不 ...

redis里可以设置key失效时间,也可以自已写定时器定时清理,自已写的话更灵活一点,因为可以决定失效的内容要转储还是直接清掉什么的,这要看自已的业务需求了
JackJiang 发表于 2 年前
引用:li709854423 发表于 2022-05-25 16:25
这里说到离线消息到redis,中间还要经过MQ吗?然后在投递完消息后,再进行存储历史消息?这时候存储历史消 ...

MQ的作用主要是跟数据库这种慢IO进么解偶,也就是在高性能场景下的销峰去谷,redis主要是为了读写性能。
离线消息进mq主要是为了写性能(落库),进redis主要是为了读性能
li709854423 发表于 2 年前
离线消息是redis存的话,那怎么让7天前的消息被清掉?比如一个用户8天未登录,每天都有一条,那第一条是不是要清掉。redis不会清理list或者zset,map之类结构里的数据吧。需要实现一个定时器去扫描过期消息吗?还是如何实现清理7天前的离线数据
li709854423 发表于 2 年前
这里说到离线消息到redis,中间还要经过MQ吗?然后在投递完消息后,再进行存储历史消息?这时候存储历史消息就不用MQ?存redis性能损耗很严重吗。需要经过MQ?默认投递到MQ就当做离线储存成功?可以ACK回去了吗
fuxinto 发表于 2 年前
会话列表和每个会话的未读数怎么处理呢
JackJiang 发表于 2 年前
引用:ccc007xp 发表于 2022-05-04 09:37
感觉这里的描述有点问题。扩散写为什么是 读多写少

文章意思是说,发送者生成的同一条消息将被群内上千上万人各读一次,读多写少说的就是这个意思
ccc007xp 发表于 2 年前
引用:6.4小结

在 IM 这种应用场景下,通常会用到扩散写这种消息同步模型,一条消息产生一条,但是可能会被读多次,是典型的读多写少的场景。


感觉这里的描述有点问题。扩散写为什么是 读多写少

返回顶部