为什么使用队列?因为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()
//创建订单,减少库存
}多个商品可以创建多个队列
header() 函数向客户端发送原始的 HTTP 报头。(官方解释)通俗的讲header函数将参数中的字符串作为服务端的响应头来返回给客户端。什么是服务端的响应头?打开谷歌浏览器看看network中的请求response header信息即可。更多的参数百度response header即可浏览器...
php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...
上篇文章已经讲解arrayacces的原理,现在来讲解下arrayaccess的实际应用。一个大型的互联网项目中必然会存在各种配置信息,例如多种数据库信息:mysql,tidb,mongodb,redis,某个业务模块单独的配置信息如比例,额度等等,那么该如何治理配置信息?PHP项目中大部分的框架都...
(1).config.php 配置文件<?php /** * RabbitMQ_Config */ $config = [ 'host' => ...
(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习: (2.1)pcntl_fork()执行时: &nbs...
【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1. <?php 2. $data = ['1', '2', &...