首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >电商项目实战:如何设计站内信

电商项目实战:如何设计站内信

作者头像
田维常
发布2023-02-27 09:29:07
发布2023-02-27 09:29:07
3.3K0
举报

你好,我是田哥

上一期给大家分享了电商项目实战:如何设计提醒商家

可能部分同学不理解什么是站内信,但我相信大部分同学是知道的,站内信说白了就是系统内部的一些消息,和发短信、发邮件类似,但是站内信只是系统内的发送,不想短信那样需要花money。

恭喜你,你的会员成功升级到了15级! 【xxx】【点赞】了你的【文章】【文章的标题】 你的文章 【xxx】 已被推荐到首页 你的喜好的【xxx】已经上线

比如下面这两种常见:

由此可知,站内信在系统里也扮演着一个非常重要的角色。

电商项目中,站内信肯定是少不了的,比如我们订单迟迟不付款,有的电商平台就会给你发站内信,提示你的订单还没有付款,或者提示订单快要超时了等等。

还比如,双11活动,各大电商平台会根据你的喜好,给你发送某某商品大促销,优惠多少多少,当你登录系统会有各种消息提示的。

站内信定制、推送、阅读

站内信分为三个步骤:

  • 运营人员制定好站内信模板
  • 站内信推送(用户行为推送、运营人员主动推送等)
  • 用户阅读(阅读、删除等操作)

运营人员

运营人员会根据不同情况制定好不同的站内信模板,保存到数据库中(通常会保存到缓存中,减轻数据库压力)。运营人员可以对站内信模板进行CRUD。

用户端

登录系统就会有各种提示,然后点开查看消息,有时候消息很多,可以直接点全部已读,这样那个红点点就会消失,用户也可以对消息进行删除,或者消息里包含理解,用户可以直接通过连接跳转到对应页面。用户还可以选中关闭站内信的通知,比如:

设计

我们可以先设计出一版,后期可能会有些些调整,但是核心部分是不变的。

表结构设计

我们可以设计出两张表:站内信模板表和用户站内信表

先来看看站内信模板表:

代码语言:javascript
复制
CREATE TABLE `tb_system_message` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `title` varchar(128) DEFAULT NULL COMMENT '标题',
  `content` longtext DEFAULT NULL COMMENT '内容',
  `create_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `send_type` int DEFAULT 0 COMMENT '发送类型:全部发送、部分发送、单独发送',
  `deleted` int DEFAULT NULL COMMENT '已删除',
  `link` varchar(255) DEFAULT NULL COMMENT '连接',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  COMMENT='站内信模板表';

其实,和我们系统内短信模板有点类似,在代码实现时,由于站内信模板变更比较少,所以通常都会对其进行缓存(比如Redis),减轻数据库压力,提示系统性能。但是既然用到了缓存,那就不得不得面临着缓存的一些问题,比如缓存击穿、缓存穿透以及缓存数据一致性等问题。

关于站内信模板相关的操作过程:

用户站内信表

用户站内信表:

代码语言:javascript
复制
CREATE TABLE `tb_user_message` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `message_id` bigint NOT NULL COMMENT '站内信id',
  `message_content` longtext   COMMENT '站内信内容,如果没有动态替换的就可以不用保存',
  `receiver_name` varchar(64) NOT NULL COMMENT '接收人名字',
  `receiver_id` bigint NOT NULL NOT NULL COMMENT '接收人id',
  `read` int DEFAULT 0  COMMENT '是否已读',
  `deleted` int DEFAULT NULL  COMMENT '是否已删除',
  `create_time` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  COMMENT='用户站内信表';

用户站内信表是对用户的,肯定有用户id了,对某个用户发送站内信,然后就保存一条记录。

用户某个行为,或者运营人搞什么活动之内的,在业务代码里查询指定的站内信模板,可能会有涉及到动态替换站内信模板中的内容,替换好了然后保存到这张表里,也就代表着一个站内信推送成功。

在业务代码里,通常会做异步发送站内信,比如可以用线程池,也可以使用消息队列。

如果系统内没有引入消息队列,那就不妨使用线程池,以后面试也可以用来吹牛逼,咱们也是用过并发编程知识到项目中了。然后,自己对线程池做进一步的深入研究,最后面试官不管怎么问线程池的问题都能轻松应对,还愁拿不到offer吗?

目前站内信模板的CRUD已经完成,接下来就是业务代码里把发站内信给搞定,这里就不专门说明了,会在对应业务代码里进行解释说明。

目前电商项目已形成文档如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 站内信定制、推送、阅读
    • 运营人员
    • 用户端
  • 设计
    • 表结构设计
    • 用户站内信表
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档