php+redis实现秒杀

236 阅读1分钟

1.商品库存入队列

<?php

$redis new Redis();
$redis->connect('127.0.0.1'6379);

//定义商品Id
$good_id 1;

//定义商品的库存数量
$count 10;

//为商品定义一个库存队列key
$seckillKey '2021_1_26_seckill_' . $good_id;

//向当前商品队列写入库存
for ($i 1$i <= $count$i++)
{
    $redis->lPush($seckillKey$i);
}

echo "商品id:{$good_id}的商品队列设置成功";

2.秒杀

<?php
$redis new Redis();
$redis->connect('127.0.0.1'6379);

//获取用户要秒杀的商品id
$good_id $_GET['id'] ?? 0;
if(empty($good_id))
{
    die('请传递正确的商品id');
}

//商品库存队列key
$seckillKey '2021_1_26_seckill_' . $good_id;

//从库存队列提取库存
$stock $redis->lPop($seckillKey);
if (!$stock)
{
    die('秒杀失败,库存不足!');
}
else
{
    echo '秒杀成功' . PHP_EOL;

    //todo()
    //创建订单,减少库存
}