请教站内信的设计思路

现在的站内信实现方式如下,共两个表.
message表
图片描述

message_content表
图片描述

后台管理员发送全局消息的时候,只向message_content表中,插入一条type=global消息即可,然后前台会员登录时拉取消息到message表中。
但是,目前我的网站有50W会员我只想向一部分会员,比如40W会员发送消息,这就难住我了。。。
请这时候,要如何设计表?

阅读 4.7k
2 个回答

最简单的方法,设置自定义规则。

message表再加两个字段,自定义条件字段如 map,值 value 。然后用 type 区分(你的type应该放到message表,而不是message_content表),比如 type=group 的时,表示某个会员组接收,map为=时,value为1时就表示,会员组为1。。type为point,map为>,value为100,就表示积分大于100,type为users,map为in,value=1,2,3。就标识用户id为1、2、3这三个人。

基本上就可以了。

站内信的思路就是要条件可以自定义。

把拉取顺序倒置一下,在生成消息模板的时候,就预先把要接收的用户分发出去;

生成message_content表数据,要选择下发的用户,选完用户可以把这些用户ID存放在redis中,然后用户上线的时候,从redis中读取,有数据就给提示,用户已查看,就删除,然后存入message表。

(如果不用redis,直接插入message表也行,只需要插入message_content_iduser_id就可以了,读取状态字段在数据表中默认设置为0未查看,然后采用批量插入的方式,也挺快的)

结合一下 @lscho 的数据表设计就差不多了。


以上推送模式都有一个缺点:就是消息模板不能实时推送给用户,必须要用户下次登陆或者触发某个页面,才能得到消息。workerman的消息推送框架了解一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题