一种即时通信IM聊天数据存储读写交互的方法技术

技术编号:35786085 阅读:18 留言:0更新日期:2022-12-01 14:33
本发明专利技术公开了一种即时通信IM聊天数据存储读写交互的方法,采用:JAVA编程技术,Netty搭建im服务器,Hbase存储聊天信息,Redis数据有效期内多写,MQ广播实时查找需要推送用户,MySQL存储用户信息,聊天列表信息(会话列表)。本发明专利技术Hbase保存聊天信息,Redis同步未读消息,未读消息临时缓存,实现消息写扩展;推送的消息通过MQ广播到所有IM服务器,不需要专门记录用户在某台IM系统上有专有通道,推送消息异步处理;MySQL仅用户信息和会话列表存储,减少MySQL的存储数据量。MySQL的存储数据量。MySQL的存储数据量。

【技术实现步骤摘要】
一种即时通信IM聊天数据存储读写交互的方法
[0001]

[0002]本专利技术涉及的是及时通信
,具体涉及一种即时通信IM聊天数据存储读写交互的方法。

技术介绍

[0003]即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。IM系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步和存储,服务器会自动对IM系统聊天窗口发送和接收到的消息进行保存,形成聊天记录并保存在关系型数据库中,随着用户的不断增多,聊天数据也随之呈现海量的增多,单一的查询效率也会随之降低,为用户可以快速拉取和查看自己的聊天记录,需要一个合理的聊天数据设计和存储介质。
[0004]基本原理:1:用户客户端登陆IM系统;2:查询用户列表;3:查询需要聊天的用户,进入会话,查询用户聊天历史消息;4:发送聊天消息;5:服务器存储聊天消息,并推送消费到接受人客户端 技术手段:1:使用Netty搭建IM系统。
[0005]2:MySQL用于聊天信息,聊天列表信息,用户信息存储。
[0006]方法步骤:1:用户客户端登陆IM系统,建立自己的独有通讯通道;2:从MySQL中查询用户列表,查询需要聊天的用户,进入会话,查询用户聊天历史消息;3:用户发送消息,IM系统接收消息,并查找用户所在IM系统把请求转移到对应的IM系统中,给接收方推送消息。
[0007]4:将聊天信息保存MySQL,方便历史消息和未读消息查询。<br/>[0008]数据结构:历史消息MySQL:会话id|消息自增id|消息类型|内容|创建时间时间;未读消息MySQL:会话id|消息id|用户id|是否已读|;会话列表MySQL:会话id|用户id |。
[0009]随着互联网的发展,针对传统行业和互联网行业中即时通讯越发重要,各种各样的即时通讯软件也层出不穷;即时通讯IM系统也提供了越来越丰富的通讯功能,但是目前IM系统的聊天数据存储大都使用关系型数据库存储,对于历史消息的查询,随着数据量的增大查询速度也会随之变慢。
[0010]综上所述,本专利技术设计了一种即时通信IM聊天数据存储读写交互的方法。

技术实现思路

[0011]针对现有技术上存在的不足,本专利技术目的是在于提供一种即时通信IM聊天数据存储读写交互的方法,实现了聊天记录的通用存储设计,快速历史消息和未读消息读取。
[0012]为了实现上述目的,本专利技术是通过如下的技术方案来实现:一种即时通信IM聊天数据存储读写交互的方法,包括以下步骤:1:用户登陆IM系统,建立属于自己的独有通讯通道。并且从MySQL拉取自己的会话列表。
[0013]2:用户选择需要建立聊天的用户,进入聊天会话,从Redis中拉取未读消息。
[0014]3:用户发起聊天消息4:消息到达服务器后,根会话id计算RowKey,把需要推送的消息通过MQ广播到所有IM服务器,如果服务器有该用户专有通讯通道直接推送消息,并且保存联系消息到Hbase中,如果没有专有通道,说明用户不在线,此时消息需要保留一份未读消息到Redis中设置有效期,并且同步保存联系消息到Hbase中。
[0015]所述的步骤4采用以下数据结构:Hbase历史消息:自定义RowKey|消息类型|内容|创建时间时间|发送人|会话|Redis未读消息:zset{Key:用户id| valueJson={消息类型|内容|创建时间时间}| score:RowKey}会话列表MySQL:会话id|用户id |。
[0016]所述的步骤4采用了RowKey结构:Hbase存储IM消息,RowKey设计;会话%20 | 会话id | 逆序消息id;会话取模值的目的为数据分区(region)存储,预分区能够分摊数据读写压力;会话id确定唯一会话,一个群里的所有消息拥有相同的会话id;逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息id值越小,IM软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息。
[0017]本专利技术具有以下有益效果:1、MySQL仅用户信息和会话列表存储,把历史消息的查询从MySQL转移到Hbase,减轻了MySQL的查询压力,Redis来承载消息有效期内的写扩展。
[0018]2、历史消息设计充分利用的Hbase数据天然有序,基于rowKeyASCIl顺序排列,分布式、可伸缩的大数据存储,rowKey查询性能高的特性。
[0019]3、统一rowKey设计配合Hbase的rowKeyASCIl排序,查询只需要根据rowKey查询。
附图说明
[0020]下面结合附图和具体实施方式来详细说明本专利技术;图1为本专利技术的方法流程图。
[0021]具体实施方式
[0022]为使本专利技术实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本专利技术。
[0023]参照图1,本具体实施方式采用以下技术方案:一种即时通信IM聊天数据存储读写交互的方法,包括以下步骤:1:用户登陆IM系统,建立属于自己的独有通讯通道。并且从MySQL拉取自己的会话列表。
[0024]2:用户选择需要建立聊天的用户,进入聊天会话,从Redis中拉取未读消息。
[0025]3:用户发起聊天消息4:消息到达服务器后,根会话id计算RowKey,把需要推送的消息通过MQ广播到所有IM服务器,如果服务器有该用户专有通讯通道直接推送消息,并且保存联系消息到Hbase中,如果没有专有通道,说明用户不在线,此时消息需要保留一份未读消息到Redis中设置有效期,并且同步保存联系消息到Hbase中。
[0026]数据结构:Hbase历史消息:自定义RowKey|消息类型|内容|创建时间时间|发送人|会话|Redis未读消息:zset{Key:用户id| valueJson={消息类型|内容|创建时间时间}| score:RowKey}会话列表MySQL:会话id|用户id |。
[0027]RowKey结构:Hbase存储IM消息,RowKey设计;会话%20 | 会话id | 逆序消息id;会话取模值的目的为数据分区(region)存储,预分区能够分摊数据读写压力;会话id确定唯一会话,一个群里的所有消息拥有相同的会话id;逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息id值越小,IM软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息。
[0028]本具体实施方式采用:JAVA编程技术,Netty搭建im服务器,Hbase存储聊天信息,Redis数据有效期内多写,MQ广播实时查找需要推送用户,MySQL存储用户信息,聊天列表信息(会话列表)。
[0029]本具体实施方式Hbase保存聊天信息,Redis同步未读消息,未读消息临时缓存,实现消息写扩展;推送的消息通过MQ广播到所有IM服务器,不需要本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种即时通信IM聊天数据存储读写交互的方法,其特征在于,包括以下步骤:(1)、用户登陆IM系统,建立属于自己的独有通讯通道,并且从MySQL拉取自己的会话列表;(2)、用户选择需要建立聊天的用户,进入聊天会话,从Redis中拉取未读消息;(3)、用户发起聊天消息;(4)、消息到达服务器后,根会话id计算RowKey,把需要推送的消息通过MQ广播到所有IM服务器,如果服务器有该用户专有通讯通道直接推送消息,并且保存联系消息到Hbase中,如果没有专有通道,说明用户不在线,此时消息需要保留一份未读消息到Redis中设置有效期,并且同步保存联系消息到Hbase中。2.根据权利要求1所述的一种即时通信IM聊天数据存储读写交互的方法,其特征在于,所述的步骤4采用以下数据结构:Hbase历史消息:自定义RowKe...

【专利技术属性】
技术研发人员:付丹曾昌林
申请(专利权)人:成都优啊网络科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1