秒杀项目总结
分布式会话
1.用户登录
明文密码二次MD5加密
参数校验+全局异常处理
2.共享session
Redis
3.页面静态化,页面本地缓存。
前后端分离。后端只发送动态参数包。
静态资源优化
秒杀优化
超库存怎么办
-
1.使用事务+数据库建立唯一索引
-
其他:为了解决超卖问题,我们当然可以在Service层给更新表添加一个事务,这样每个线程更新请求的时候都会先去锁表的这一行(悲观锁),更新完库存后再释放锁。可这样就太慢了,1000个线程可等不及。乐观锁。一个最简单的办法就是,给每个商品库存一个版本号version字段。
-
2.使用使用事务+synchronized synchronized锁一般不要加载业务代码上
Redis缓存
将库存提前存入Redis中,做预减库存,减少数据库访问
然后异步给RabbitMq下单操作,
、一个一个排队秒杀。
前端做轮询操作,直到异步给RabbitMq的任务处理完成。
使用Lua脚本
Lua脚本在Redis中是以原子方式执行的。
RabbitMq
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。
安全优化
接口隐藏
将真实的秒杀地址隐藏,在请求先获取接口,获取接口成功再做秒杀。
接口限流
-
计数器
-
令牌桶
-
…
算术验证码引入
用来排除机器人