java高并发商城秒杀实现项目框架搭建
SpringBoot项目框架搭建
使用IDEA搭建出一个框架,如下图所示
集成Mybatis
需要的添加的依赖:mybatis-spring-boot-starter
需要添加的配置:mybatis
添加连接数据库的依赖,并且在数据库上创建一个简易的表,并且在idea上建立连接数据库的方法。
集成Redis
先下载Redis,点击以下链接进入官网Redis官网
一开始也是同样的添加Jedis和Fastjson依赖
通用缓存Key封装:实现类->抽象类->接口
总结以下,首先我们需要将配置文件写好,然后将JedisPool配置完成,写一个service将我们的接口布置好,然后通过KeyProfix将我们的模块做一个区分。
登录模块
那接下来配置好后台以后就接着是登录,它需要两个MD5:
1、用户端:PASS=MD5(明文+固定salt)
2、服务端:PASS=MD5(用户输入+随机salt)
添加两个方法to/do login,以下为代码
用bootstrap来画页面,iquery来做home表达验证,layer来做弹框,js做MD5
然后在html上写自己的页面,这里注意引用的时候用的是@+
把秒杀user的对象创建出来
创建方法来判断手机号是否存在、正确等等,方法如下
实现登录
接下来就是实现登录的环节了我们需要做到以下几点:
1、数据库设计
2、明文密码两次MD5处理
3、KSR303参数检验+全局异常处理器
补充一下,还有第四步分布式Session。在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session。当用户第二次发送请求时,Nginx将其负载均衡到B服务器,而这时候B服务器并不存在Session,所以就会将用户踢到登录页面。这将大大降低用户体验度,导致用户的流失,这种情况是项目绝不应该出现的。
第一种:粘性session
第二种:服务器session复制
第三种:session共享机制
第四种:session持久化到数据库
第五种terracotta实现session复制
一,场景:用户登录时需要输入验证码登录,如何实现用户通过验证码登录
二,实现逻辑
1,进入登录页面时,调用生成验证码接口,入参:当前时间戳(前端传入)
2,后台调用生成验证码接口,生成验证码,并以入参时间戳为 key,验证码为value,保存在redis,并设置有效时间为1分钟,超时需要重新输入
3,用户输入验证码,调用后台登录接口,入参:用户名,密码,验证码,key
4,登录时校验,比较当前输入验证码与从redis中获取验证码是否一致,是则登录成功
代码(Controller,工具类,验证码实体)
Controller
验证码实体类