为什么使用队列?因为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()
//创建订单,减少库存
}多个商品可以创建多个队列
应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...
(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...
在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) { pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...
最近在编写windows php多线程的东西,从官网下载了PHP的线程安全版,尝试开启curl扩展extension=php_curl.dllphp -m 却提示 PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl...
<?php //如果支持exec函数,可以使用的方式 exec('chcp 65001'); //如果exec函数因安全问题禁用,可以使用的方式 pclose(popen('chcp 65001', 'r'));...