Skip to content

RecYan/secKill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSM整合开发

java并发秒杀业务实战(慕课)
对应博客地址:https://www.recyan.top/

7/12/2018 V_01

  • 完成了数据库表的设计,建立了secKill:秒杀商品的表和successKilled:秒杀成功的表,其中successKilled用了了联合主键检验, 以保证每一用户或注册的手机号,只能参与一次秒杀活动。
  • 完成了数据表的映射、MybatisSpring的整合配置。
  • 编写了DAO层相关的实现代码,并通过了对应的单元测试。
  • 出现的问题:已记录,最后补充
  • 总结:已记录,最后补充

7/13/2018 V_02

  • 完了service层的编码,新建了枚举包,用于表述常量数据字段,规范了编码,易于后端封装json传值。设计DTO包,用于service层和web层数据交互。
  • 定义一个md5的加密“盐值”和自定义拼接规则 ,用于混淆MD5加密过程。保证了md5秘钥不易被逆向破解。
  • 实现了当用户对同一个商品进行二次秒杀时,提前秒杀或超时秒杀,系统作出对应的响应。
  • DTO层设计了Exposer类,当秒杀开启时,才暴露秒杀接口的地址,没开启时,只输出系统的时间和秒杀时间,一定程度上规避了浏览器插件作弊风险。 同时SeckillExecution类,用来封装秒杀执行后的结果。
  • 配置了spring-service.xml文件,将service对象交由spring托管,使用了基于注解的声明式事务,实现对executeSecKill方法相关提交和回滚操作。
  • 通过了service层对应的单元测试。
  • 出现的问题:已记录,最后补充
  • 总结:已记录,最后补充

7/15/2018 V_03

  • 完成前端交互设计过程,流程图参见博客。

  • 秒杀接口的api使用了Restful风格。

    提交方式 url 具体
    GET /seckill/list 秒杀列表
    GET /seckill/{seckillId}/detail 秒杀页
    GET /seckill/time/now 系统时间
    POST /seckill/{seckillId}/exposer 暴露秒杀
    POST /seckill/{seckillId}/{md5}/execution 执行秒杀

  • 完成了springMVC的整合,使用注解方式映射驱动,使用DTO层的seckillResult实体,将所有的ajax请求返回类型,全部封装成json数据,与前端交互。
  • 前端页面使用jQuery&&pluginBootstrap技术完成。

7/18/2018 V_04

  • 对项目中的并发点,进行了分析优化 [1] 详情页暴露秒杀按钮,且采取了按钮防重复机制,减轻请求重复提交的压力。
    [2] 采用了Redis缓存服务器,进一步减轻后台压力,同时采用了超时穿透<本处缓存1小时>来维护一致性,请求路径:请求-->Redis-->mysql
    [3] 对于sql操作处理,在原有sql基础上编写了seckill.sql存储过程,减少了等待行级锁时间,整个sql操作过程都放到mysql服务端进行。
    [4] 分离了动静态数据,静态页面-->CDN缓存,后端缓存-->Redis
    [5] 整个项目通过了完整测试。

  • 详细业务逻辑、优化分析,参见博客。

  • 最终项目效果图如图所示: 列表页
    详情页 采用cookie值+md5值作为登录凭证
    秒杀结果
    数据表

    Redis
    测试

About

🚀java并发秒杀业务实战

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors