请教站内信的设计思路
现在的站内信实现方式如下,共两个表.
message表
message_content表
后台管理员发送全局消息的时候,只向message_content表中,插入一条type=global消息即可,然后前台会员登录时拉取消息到message表中。
但是,目前我的网站有50W会员我只想向一部分会员,比如40W会员发送消息,这就难住我了。。。
请这时候,要如何设计表?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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_id
和user_id
就可以了,读取状态字段在数据表中默认设置为0未查看,然后采用批量插入的方式,也挺快的)结合一下 @lscho 的数据表设计就差不多了。
以上推送模式都有一个缺点:就是消息模板不能实时推送给用户,必须要用户下次登陆或者触发某个页面,才能得到消息。workerman的消息推送框架了解一下