高并发秒杀系统设计1.docx

PAGE 2 高并发秒杀系统设计 功能需求:设计一个秒杀系统 初始方案 商品表设计:热销商品提供给用户秒杀,有初始库存。 @Entity public class SecKillGoods implements Serializable{ ??? @Id ??? private String id; ??? /** ???? * 剩余库存 ???? */ ??? private Integer remainNum; ??? /** ???? * 秒杀商品名称 ???? */ ??? private String goodsName; } 秒杀订单表设计:记录秒杀成功的订单情况 @Entity public class SecKillOrder implements Serializable { ??? @Id ??? @GenericGenerator(name = PKUUID, strategy = uuid2) ??? @GeneratedValue(generator = PKUUID) ??? @Column(length = 36) ??? private String id; ??? //用户名称 ??? private String consumer; ??? //秒杀产品编号 ??? private String goodsId; ??? //购买数量 ??? private Integer num; } Dao设计:主要就是一个减少库存方法,其他CRUD使用JPA自带的方法 public interface SecKillGoodsDao extends JpaRepositorySecKillGoods,String{ ??? @Query(update SecKillGoods g set g.remainNum = g.remainNum - ?2 where g.id=?1) ??? @Modifying(clearAutomatically = true) ??? @Transactional ??? int reduceStock(String id,Integer remainNum); } 数据初始化以及提供保存订单的操作: @Service public class SecKillService { ??? @Autowired ??? SecKillGoodsDao secKillGoodsDao; ??? @Autowired ??? SecKillOrderDao secKillOrderDao; ??? /** ???? * 程序启动时: ???? * 初始化秒杀商品,清空订单数据 ???? */ ??? @PostConstruct ??? public void initSecKillEntity(){ ??????? secKillGoodsDao.deleteAll(); ??????? secKillOrderDao.deleteAll(); ??????? SecKillGoods secKillGoods = new SecKillGoods(); ??????? secKillGoods.setId(123456); ??????? secKillGoods.setGoodsName(秒杀产品); ??????? secKillGoods.setRemainNum(10); ??????? secKillGoodsDao.save(secKillGoods); ??? } ??? /** ???? * 购买成功,保存订单 ???? * @param consumer ???? * @param goodsId ???? * @param num ???? */ ??? public void generateOrder(String consumer, String goodsId, Integer num) { ??????? secKillOrderDao.save(new SecKillOrder(consumer,goodsId,num)); ??? } } 下面就是controller层的设计 @Controller public class SecKillController { ??? @Autowired ??? SecKillGoodsDao secKillGoodsDao; ??? @Autowired ??? SecKillService secKillService; ??? /** ???? * 普通写法 ???? * @param consumer ???? * @param goodsId ???

文档评论(0)

1亿VIP精品文档

相关文档