页面
-
登录页面
- 登录成功后,跳转商品列表
-
商品列表页
- 加载商品信息
-
商品详情页
- 根据商品id查出商品信息
- 返回VO(包括rmiaoshaStatus、emainSeconds)
- 前端根据数据展示秒杀按钮,点击开始秒杀
-
订单详情页
秒杀页面设置
后端返回秒杀状态miaoshaStatus,前端根据秒杀状态,设置页面:
- 状态码 0, 未开始,倒计时
- 状态码 1, 已开始,显示秒杀按钮
- 状态码 2 ,已结束
剩余时间 remainSeconds
页面加载时,获取remainSeconds 的值
- 未开始,remainSeconds = 开始时间-当前时间
- 禁用秒杀按钮,显示倒计时
- 设置定时器,回调函数,一秒一次,修改remainSeconds 值
- 直到 remainSeconds = 0
- 清除设置定时器,则修改页面,启用秒杀按钮
- 已开始,remainSeconds = -1,启用秒杀按钮
- 已结束 ,remainSeconds = 0,禁用秒杀按钮
倒计时功能
<span th:if="${user eq null}"> 您还没有登录,请登陆后再操作<br/></span>
<input type="hidden" id="remainSeconds" th:value="${remainSeconds}" />
<span th:if="${miaoshaStatus eq 0}">秒杀倒计时:<span id="countDown" th:text="${remainSeconds}"></span>秒</span>
<span th:if="${miaoshaStatus eq 1}">秒杀进行中</span>
<span th:if="${miaoshaStatus eq 2}">秒杀已结束</span>
秒杀业务逻辑
点击秒杀按钮,传递商品ID, 秒杀商品,form表单提交到后端
-
判断库存
-
是否重复秒杀
- 查询订单信息。如存在,则表示已经秒杀过了
-
减库存、下订单、写入秒杀订单(事务)
- 传入参数(user,goods)用户秒杀商品
- 秒杀成功后,生成订单信息,包含两个
- 订单详细信息
- 秒杀订单信息,包括user_id、order_id、goods_id,便于设置唯一索引(user_id、goods_id)
-
支付模块
页面优化
- 页面缓存+URL缓存(Thymeleaf)
- 对象缓存
- 页面静态化,前后端分离
- 静态资源优化
- CDN优化
缓存
页面缓存
- 从缓存中取html源代码,非空返回(缓存命中)
- 若缓存为空(缓存失效)
- 手动渲染
- thymeleafViewResolver.getTemplateEngine,模板引擎
- WebContext,包含业务数据
- 同时添加页面缓存,页面缓存有效期(比如60秒)
- 返回html源代码
- 手动渲染
- 页面缓存,一般有效期比较短,保证数据及时性
@RequestMapping(value = "/to_list", produces = "text/html")
@ResponseBody
public String list(HttpServletRequest request, HttpServletResponse response, Model model, MiaoshaUser user) {
model.addAttribute("user", user);
// 取缓存
String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
// 缓存非空,返回
if (!StringUtils.isEmpty(html)) {

最低0.47元/天 解锁文章

223

被折叠的 条评论
为什么被折叠?



