美文网首页
laravel测试简单秒杀活动

laravel测试简单秒杀活动

作者: berger_w | 来源:发表于2020-01-16 17:52 被阅读0次

简单的思路就是: 

使用redis的lpush和lpop 在结合查询  lrange 得到目前的数组信息完成需求。

首先给一组固定需要秒杀数量的数据,并设置过期时间。然后根据用户请求,从redis的这个固定数量的数据  一个一个的lpush,然后生成新的关联数据的关系数据,比如 说用户对应的订单,最后通过计算原先数量的数据是否大于1 来判断是否商品被抢光。最后结束活动。

use Illuminate\Support\Facades\Redis;

class RedisController extends Controller

{

    public $user_number = 20; // 允许进入队列的人数

    public function addStock()

    {

        $goods_number = 20; // 商品库存数量为10

        if (! empty(Redis::llen('goods_name'))) {

            echo '已经设置了库存了';

            exit;

        }

        Redis::command('del', ['user_number', 'success']);

        // 将商品存入redis链表中

        for ($i = 1; $i <= $goods_number; $i++) {

            // lpush从链表头部添加元素

            Redis::lpush('goods_name', $i);

        }

        // 设置过期时间

        $this->setTime();

        // 返回链表 goods_name 的长度

        echo '商品存入队列成功,数量:'.Redis::llen('goods_name');

        // return  view('front.photo');

    }

    private function setTime()

    {

        // 设置 goods_name 过期时间,相当于活动时间

        Redis::expire('goods_name', 120);

    }

    public function start()

    {

        $uid = mt_rand(1, 999); // 假设用户ID

        // 如果人数超过50,直接提示被抢完

        if (Redis::llen('user_number') > $this->user_number) {

            echo '遗憾,被抢完了';

            exit;

        }

        // 获取抢购结果,假设里面存了uid

        $result = Redis::lrange('user_number', 0, 20);

        // dd($result);

        // 如果有一个用户只能抢一次,可以加上下面判断

        if (in_array($uid, $result)) {

            echo '你已经抢过了';

            exit;

        }

        // 将用户加入队列中

        Redis::lpush('user_number', $uid);

        // 从链表的头部删除一个元素,返回删除的元素,因为pop操作是原子性,即使很多用户同时到达,也是依次执行

        $count = Redis::lpop('goods_name');

        if (! $count) {

            echo '被抢完了';

            exit;

        }

        $msg = '抢到的人为:'.$uid.',商品ID为:'.$count;

        Redis::lpush('success', $msg);

        echo '恭喜你,抢到了';

    }

    /**

    * 查看抢到结果

    */

    public function result()

    {

        $result = Redis::lrange('success', 0, 20);

        dd($result);

    }

ab -n 1000 -c 100 url例如 http://www.baidu.com

-n 1000 总请求数

-c 100 单个时刻并发数

相关文章

  • laravel测试简单秒杀活动

    简单的思路就是: 使用redis的lpush和lpop 在结合查询 lrange 得到目前的数组信息完成需求。 首...

  • redis实现秒杀

    秒杀活动内容实现简单的秒杀页面(显示当前秒杀活动状态)和秒杀接口,不需要考虑下订单和退货流程。秒杀接口要求时间到了...

  • Jmeter运营活动并发测试——巧用集合点

    在运营活动测试过程中,经常需要对秒杀活动或定时抽奖活动进行并发测试。那么怎样快速便捷的模拟多用户同时参与活...

  • python版:单机redis实现秒杀,防止超限

    测试环境 ubuntu 16.04 python 3.6.6 redis 3.0.6 简单描述 抢购、秒杀是一个很...

  • laravel 基础教程 —— 测试

    测试 简介 测试是 Laravel 构建的核心理念。事实上,Laravel 开箱即用的支持 PHPUnit 测试,...

  • 学习笔记《Laravel 浏览器测试》

    Laravel Dusk 是 Laravel 官方提供的浏览器测试解决方案:https://laravel.com...

  • JMeter接口并发

    秒杀类活动(数量少,抢购用户多),测试并发请求是否会导致商品超卖 同一用户并发N次很简单:就是同一个请求并发10次...

  • 秒杀——活动,智能运动手

    智能运动手环秒杀活动 在每天上午十点,本项目都将会定向开启秒杀活动,每次秒杀活动都将推出5个智能手环产品,活动周...

  • 到底亚马逊秒杀进度条是什么意思

    亚马逊秒杀进度条是什么 亚马逊秒杀进度条是亚马逊秒杀活动,比如Lightning Deals等限时低价活动中,商家...

  • 高性能秒杀

    秒杀是电子商务网站常用的一种营销手段。 秒杀对网站技术是极大的挑战,秒杀活动带来的并发访问量大。 秒杀活动的技术挑...

网友评论

      本文标题:laravel测试简单秒杀活动

      本文链接:https://www.haomeiwen.com/subject/tdxqzctx.html