为什么使用队列?因为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()
//创建订单,减少库存
}多个商品可以创建多个队列
获取浏览器信息原理是基于浏览器的UA信息,早在AsP时代就这样判断,但是腾讯总是喜欢自己折腾,不知道以后会修改成什么! 提取自人人商城官方自带的判断方法:function is_weiXin() { if (empty($_SERV...
PHP验证码不显示的问题应该是经常的事情,我在这里把2种解决方案都发出来方便大家后期使用.因为是昨天晚上自己写验证码都没有显示,我就直接把之前和李炎恢老师上课写的验证码拿来还是不显示,醉了。首先是第一种方法:1、打开服务器安装目录下的php.ini文件;2、去掉;extension=php_gd.d...
<?php /* *算法学习自百度.只是学习和记录 */ header("Content-type:text/html;charset=utf-8"); //1.设置奖项,id是奖项id,name是中奖名称,v是中奖概率 $arr =&n...
php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...
(1).学习目标: 了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习: (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...
在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) { pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...