当前位置:首页 > PHP > 正文内容

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

高老师6年前 (2020-01-26)PHP3065

为什么使用队列?因为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()
    //创建订单,减少库存
}

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

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/118.html

分享给朋友:

“php redis队列实现秒杀 , php用redis 实现秒杀功能” 的相关文章

PHP中Session文件过多的解决方法

PHP中Session文件过多的解决方法

PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...

php scoket,php webscoket,php webscoket 服务器

php scoket,php webscoket,php webscoket 服务器

项目需要使用websocket推送最新订单,客户服务器非linux不支持swoole,因此使用原生,直接上代码(1).PHP服务端<?php ini_set('error_reporting', E_ALL ^ E_NOTICE); ini_set...

php异步执行,php后台运行,如何在windows下让php后台运行

php异步执行,php后台运行,如何在windows下让php后台运行

如果想在windows中执行php,并且让php脚本在后台运行,可以用下面的cmd命令start /b php  D:\wwwroot\default\demo1\run.php例如上面的命令意思后台运行run.php,如果想用php编写异步代码: ...

php trait的使用

php trait的使用

PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts {     public f...

php arrayaccess的应用场景:配置管理器

php arrayaccess的应用场景:配置管理器

上篇文章已经讲解arrayacces的原理,现在来讲解下arrayaccess的实际应用。一个大型的互联网项目中必然会存在各种配置信息,例如多种数据库信息:mysql,tidb,mongodb,redis,某个业务模块单独的配置信息如比例,额度等等,那么该如何治理配置信息?PHP项目中大部分的框架都...

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

redis订阅和发布,redis消息订阅与发布, phpredis订阅和发布

Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...