php redis队列实现秒杀 , php用redis 实现秒杀功能

Redis List队里秒杀补充:

为什么使用队列?因为pop取队列具有原子性。假如我们需要秒杀一个商品id,我们先将商品的库存保存到一个队列。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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}的商品队列设置成功";

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()
    //创建订单,减少库存
}
复制代码

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

posted @   快乐的在一起  阅读(1413)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示