电商秒杀程序, 乐观锁,Spring Boot.
如果该项目对您有帮忙,您可以右上角'star'支持一下,谢谢!
👉 http://jseckill.appjishu.com
Star me on GitHub
🐱 https://github.com/liushaoming/jseckill
👉 源码解析文档
1.Spring Boot
2.MyBatis
3.Redis
4.Thymeleaf
5.Bootstrap
6.RabbitMQ
7.zookeeper实现分布式锁
1.使用Google guava的RateLimiter来进行限流
2.减库存时,在同一事务内,先"插入记录",再"更新库存", 能有效减少行锁的作用时间.
数据库更新操作,采用乐观锁,提高并发性
3.暴露秒杀接口,暴露信息,作为不常更新的热点数据,贮存到Redis里
4.前端静态文档部署到CDN, 缺少资金的公司可以选择动静分离
动静分离:把静态资源(js,css,图片)直接部署放到nginx, 动态服务还在原有的tomcat/SpringBoot里。
5.Java应用部署多个集群节点,之间使用nginx做负载均衡和反向代理,提高客户端的并发数
6.RabbitMQ异步处理秒杀记录
1.RateLimiter限流。 并发量大的时候,直接舍弃掉部分用户的请求
2.Redis判断是否秒杀过。避免重复秒杀。如果没有秒杀过,
在Redis操作前分布式加锁
Redis秒杀(减库存,并记录已秒杀成功者的userPhone)
然后分布式解锁
3.发送秒杀记录到RabbitMQ,并且马上返回结果到客户端
4.监听RabbitMQ的队列消息, 一条条地读取消息后,操作数据库。插入秒杀记录和减库存。
并手动ACK队列
详情见源码文档
TODO
进一步的优化:等到CountDownLatch每积累20个,才去操作redis, 直接decrby 10
演示地址
👉 http://jseckill.appjishu.com
现在工作略忙,后面抽空完善技术文档
📌⭐⭐⭐❤❤❤
微信公众号