php redis 队列抢红包_php redis队列实现秒杀 , php用redis 实现秒杀功能

为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:<?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}的商品队列设置成功";

将商品id1的库存10件全部保存到队列。

然后创建一个前台的秒杀的脚本,如下:<?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()

//创建订单,减少库存

}

多个商品可以创建多个队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值