聊天系统,以下设计是否合理
聊天系统,所有逻辑业务主要都使用mysql。
用户聊天时需要判断是否为好友关系,如果每次聊天都从mysql中去查询判断是否为好友,频率太高了,个人觉得不合理。
(存在删除了好友,聊天界面未刷新或其他情况,所以聊天时有必要判断是否为好友)
方案一:
于是使用redis string 的 key value结构来判断是否为好友关系:
friend_relation_maxid_minid
maxid是userId friendId最大值,minid为userId friendId最小值。
添加好友时,创建对应的friend_relation_maxid_minid:1来存储,删除好友时,移除对应的key(该系统逻辑是删除了好友,双方同时都删除)
在聊天时判断friend_relation_maxid_minid是否为1,如果不是,则返回错误信息。
方案二:添加好友或删除好友时,mysql同步好友列表到redis ,用无序集合存储
在聊天时取出我的好友列表,判断对方用户ID是否在这个列表中。如果不是,返回错误信息。
以上两种方案哪种合适,或者有其它更好的方案?求推荐!
方案二可能更强大,可以实现交集并集之类的。