默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教IM中离线消息存储与技术选型,该不该用redis,怎么用才好
阅读(253) | 评论(2 收藏 淘帖
本人学生,IM小白,正在手搓IM Demo

技术选型和设计:
C++;Qt客户端;单机服务端;通讯库Boost.asio(传输安全采用SSL); 私有应用层协议 + tcp + protobuf ; 不支持漫游,支持同步;服务端和客户端都采用sqlite实现持久化存储(服务端存储7天达到同步效果);服务端使用Redis存储离线消息;(Demo设计简单)目前只支持单聊(由于只有单聊,因此服务端消息存储(redis+sqlite)采用写扩散存储方式);
(注:新手向Demo,仅考虑一般情况下的基本功能的实现)

想求助大佬:
在企业级IM中是不是都采用Redis模块来存储离线消息,而不是单使用裸Redis呢?
因为个人在使用中感到redis存储关系型数据异常费劲。需要类似于头部表+信息的形式来存储。通过检索得知还有如Redis模块这样的“补丁”

问题具体描述:
如存储离线消息需要用以下形式存储
rpush "message:UserId" "message:MessageID"  -- 存储消息ID
hset “message:MessageID" "sender" "id" "receiver" "id" "message" "hello" "time" "2024-12-31" -- 存储消息内容
然后在用户拉取离线消息成功之后还需要对其进行删除操作,而同样需要离线存储的还包括好友申请,个人信息更新(比如改昵称,头像,个性签名等)
这样一来就感觉操作异常费劲

我不知道是我redis的使用方式不对还是我的理解完全就是错误的。

我使用的redis库是redis++,开源在github中


ps:补充说明,经常逛本网站,看站长经常说IM的设计和实现需要跟需求走,跟用户量级走。
按理说,Demo的话,就算是使用mysql这种磁盘关系数据库来实现离线部分也是没有问题的,毕竟就是一个Demo,但是考虑到我是学生,因此特地想使用redis来实现离线部分(来练习一下redis相关知识)。结果就遇到上述问题了,经过各种蹩脚的搜索也没有找到答案,因此无奈发帖

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
上一篇:求助!安卓全机型保活实现方法,websocket前端连接能保持一直连接方法
推荐方案
评论 2
引用:JackJiang 发表于 2024-11-15 15:45
别想复杂了,先把redis扔一边,暂时把数据库用好就够了

收到,感谢指点
别想复杂了,先把redis扔一边,暂时把数据库用好就够了

打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部