周末秃发奇想,想在自己服务器试一下非常简单的秒杀功能。
首先写一个普通的下单功能,实现减库存,生成订单:
首先我在数据库把初始商品库存设置为8
通过ab压测工具访问刚才的减库存-下单接口
访问完毕之后,发现出现了超卖问题:
同时订单也多生成了
这样是万万不行的,于是我就想通过redis以及队列来实现:
首先进入laravel根目录 创建控制器:
php artisan make:controller OrderController
创建成功之后,打开该文件编辑:
将商品库存存到redis之中,访问该接口首先判断redis中是否有商品库存,没有则取数据库库存并存到redis之中,如果库存大于0,则可以下单,将下单信息添加到队列之中:
然后创建对应的Job类,用来消费队列:
php artisan make:job Order
编辑该文件,写处理方法:
同样把库存设置为8
编辑一下路由文件:
打开队列监听 通过ab压测工具访问一下:
如果想要实现30分钟之内未下单则自动取消,可新建队列 并使用其中的delay()