beego 秒杀 项目环境 golang语言框架 beego1.12.1 消息队列中间件 RabbitMQ 秒杀商品缓存:Redis 秒杀接口压测工具:JMeter 业务梳理 1. 预热缓存数据,把秒杀商品的 库存和秒杀时间 存入缓存中。 2. 秒杀接口提交地址字段address 和 商品sku sku_id,并进行数据校验 3. 在缓存里校验秒杀商品是否存在、是否有库存、是否在秒杀时间内 4. 在缓存里判断用户是否已经秒杀过 5. 把用户id、sku_id、address写入RabbitMQ的消息队列 6:处理消息使用RabbitMQ的work工作模式,一个生成者多个消费者,用于处理在短时间的HTTP请求中无法处理的复杂任务。 7:处理消息,RabbitMQ消息持久化和重复消息处理 8:校验商品库存 高并发下 redis还在减库存, 这一步再利用redis原子性校验库存,避免库存不足走到数据库操作耗性能。 9:MySQL事务秒杀下单:减库存(乐观锁,防止库存超卖)、订单表、订单子表。 10:更新redis缓存:秒杀商品库存缓存、用户下单缓存 JMeter压测 1:安装JMeter进行压测 2:在进行php-fpm进程数调优、mysql连接数调优、开启opcache, 同等配置情况下还是远远及go版下的秒杀