会话在IM系统中是一个主要的业务模块。用户进入IM的第一个界面就是会话界面。第一版的需求是会话可以在多段同步展示数据,所以必须保存到数据库中。如果没有这个需求的话,其实会话是可以直接保存到前端中的,这样也减少了服务端的负担。
首先所有的聊天消息都是用Hash结构存放在redis中。因为每个用户看到的会话内容是不一样的。会话缓存的
key是CONVERSATION_CONTENT_CACHE_+{conversationId}+{userId}
会话的缓存方式,也参考了消息的缓存机制,也是采用了redis的hash的数据结构。在获取会话列表内容,代码如下图所示,画红框的部分是需要特别注意的。因为会话列表最经常更新的救是下面三个属性
(1)最后一条@我的消息(只有群聊才有)
(2)最后一天消息的内容(只有群聊才有)
(3)未读消息数(红点展示的内容)
除了这三个属性,其他都采取普通的缓存方式。这样这三个属性需要更新的时候,就只需要单独删除对应的某个属性,而不是只是因为某些频繁更新的属性,就把整个conversation的缓存给删掉,导致请求频繁的穿透到数据库,造成数据库额外的负担。