最近公司接了个商城系统的项目,在秒杀商品这块的设计上,因为我们需要考虑到秒杀时,在线的人数可能会非常多,所以需要考虑高并发的情况;
一、在线下单代码
1.1、数据库设计
这里我们简单建立两个表 goods和order表
/*货物表*/ CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '商品id', `goods_name` varchar(255) DEFAULT NULL COMMENT '商品名称', `stock` int DEFAULT '0' COMMENT '商品库存', `add_time` timestamp NULL DEFAULT NULL COMMENT '添加时间', `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `version` int DEFAULT '0' COMMENT '版本,用于乐观锁实现', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*加入一条商品信息 */ insert into `goods`(`id`,`goods_name`,`stock`,`add_time`,`update_time`,`version`) values (1,'1',0,'2020-09-01 17:53:06','2020-09-02 15:50:28',50); /*订单表 */ CREATE TABLE `order` ( `id` int NOT NULL AUTO_INCREMENT, `goods_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, `add_time` timestamp NULL DEFAULT NULL, `update_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1466 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
1.2、商品代码
实体类
package com.example.demo.entity; import java.util.Date; import java.time.LocalDateTime; public class GoodsEntity { private Integer id; private String goodsName; private Integer stock; private Integer version; private Date addTime; private Date updateTime; public Integer getStock() { return stock; } public void setStock(Integer stock) { this.stock = stock; } public Integer getVersion() { return version; } public void setVersion(Integer version) { this.version = version; } public Date getAddTime() { return addTime; } public void setAddTime(Date addTime) { this.addTime = addTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getGoodsName() { return goodsName; } public void setGoodsName(String goodsName) { this.goodsName = goodsName; } @Override public String toString() { return "GoodsEntity{" + "id=" + id + ", goodsName='" + goodsName + '\'' + ", stock=" + stock + ", addTime=" + addTime + ", updateTime=" + updateTime + '}'; } }