# seckill **Repository Path**: Dkingo/seckill ## Basic Information - **Project Name**: seckill - **Description**: Java高并发秒杀项目 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-04 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # seckill ### 技术框架 本项目后台使用了` Springboot + MySQL + redis `技术,前台页面采用了 `Bootstrap` 和 `jQuery` 框架。 ### 运行环境 `idea` + `mysql8.0`(如需更换版本需要在数据库连接上修改一下即可) ### 项目简介 系统实现了对商品的秒杀操作,点击商品的秒杀链接后会获取` cookie `的用户手机号,当没有达到秒 杀时间则显示倒计时,否则暴露接口地址并通过验证规则进行验证,然后点击秒杀按钮进行秒杀, 并使用` redis `来提高系统的并发量。 ### 高并发优化 1:静态资源 如`bootstrap`,`jquery`等框架 用服务商提供的`cdn`加速 2:用`redis`缓存。比如快到秒杀开启的时间,一般用户都会一直刷新。那么前端就会到后台数据库中一直查询秒杀开启时间,然后和当前时间的对比,无疑加大了数据库的压力。 因为这条商品记录只需要读的数据,不需要改的数据。不要去`mysql`中去读取,放到`redis`缓存中去。 在进行`redis`的序列化和反序列的时候用到了第三方的框架`protostuff`,这个序列化更快而且数据大小可以达到原来的1/5 - 1/10左右 3:行秒杀的是一个事务,先将商品的库存减少,然后再插入购买的明细记录。只要一个事务还没有完成,mysql的行级锁就会一直锁着这条记录,这又造成了慢处理。并且还会有网络延迟和java的gc 首先可以先插入购买的记录在将商品的存库减少,插入购买记录一般很少冲突,然后在判断。并且可以把客户端的逻辑放到服务端来执行,即使用存储过程(虽然Alibaba手册中并不推荐使用存储过程)