IM即时通讯系统设计——会话管理

        会话在IM系统中是一个主要的业务模块。用户进入IM的第一个界面就是会话界面。第一版的需求是会话可以在多段同步展示数据,所以必须保存到数据库中。如果没有这个需求的话,其实会话是可以直接保存到前端中的,这样也减少了服务端的负担。

        首先所有的聊天消息都是用Hash结构存放在redis中。因为每个用户看到的会话内容是不一样的。会话缓存的

key是CONVERSATION_CONTENT_CACHE_+{conversationId}+{userId}

        会话的缓存方式,也参考了消息的缓存机制,也是采用了redis的hash的数据结构。在获取会话列表内容,代码如下图所示,画红框的部分是需要特别注意的。因为会话列表最经常更新的救是下面三个属性

(1)最后一条@我的消息(只有群聊才有)

(2)最后一天消息的内容(只有群聊才有)

(3)未读消息数(红点展示的内容)

除了这三个属性,其他都采取普通的缓存方式。这样这三个属性需要更新的时候,就只需要单独删除对应的某个属性,而不是只是因为某些频繁更新的属性,就把整个conversation的缓存给删掉,导致请求频繁的穿透到数据库,造成数据库额外的负担。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值