怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

  介绍

今天就跟大家聊聊有关怎么在Thinkphp5中使用复述,实现一个商品秒杀功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、安装复述,扩展

1。查看PHP版本信息

打到phpinfo . PHP,开查看PHP版本,我的是PHP7.3.4,还有一个需要注意建筑x64

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

2。下载扩展文件

https://pecl.php.net/package/redis https://pecl.php.net/package/igbinary

根据自己环境,选择合适的版本

3。解压

解压下载的压缩包,并把php_redis.dll, php_redis.pdb和php_igbinary.dll, php_igbinary.pdb四个文件,移至自己PHP版本对应目录下的ext文件夹下E: \ phpstudy_pro \ \ PHP \ php7.3.4nts扩展\ ext

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

4。修改PHP。ini

添加如下代码:

=php_igbinary.dll延伸   扩展=php_redis.dll

如果有这两句可以把前面的分号删掉,没有就自己添加上,要注意顺序,php_igbinary。dll要在php_redis。dll前面

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

5。重启Apache

重启后,再运行phpinfo。php,查看是否安装成功

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

二、数据结构

一共三张表,ab_goods商品表,ab_order订单表,ab_log日志表

商品表

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

订单表

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

日志表记录秒杀信息

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能

三、代码

& lt; php ?   namespace  app \指数\控制器;   use 认为\控制器;   use 认为\分贝;   use 认为\缓存\司机\复述;      class  Miaosha  extends 控制器   {      ,private  redis 美元;=,空;   ,private  cachekey 美元;=,零,,//缓存变量名   ,private  basket 美元;=,[];,//私有数组,存放商品信息=,private  store 美元;50;/* *   ,*购物车初始化,传入用户id   ,*/,public  function  __construct ()   ,{   ,父母:__construct ();      ,$ this→redis =, new  \复述();,//,实例化   ,$ this→复述→连接(& # 39;127.0.0.1 # 39;& # 39;6379 & # 39;);   ,$ this→复述→身份验证(& # 39;zxf123456& # 39;);      ,}/* *   ,*秒杀初始化   ,*/,public  function  Ms_init ()   ,{   ,//删除缓存列表   ,$ this→复述→德尔($ this→cachekey);      美元,美元len =,这→复述→llen ($ this→cachekey);   美元,美元count =,这→store 作用;len美元;      ,for  (i=0美元;,美元小姐:& lt;,计数;美元,美元我+ +),{,      ,//向库存列表推进50个,模拟50个商品库存   ,$ this→复述→lpush ($ this→cachekey, 1);   ,}      ,echo “库存初始化完成:“。$ this→复述→llen ($ this→cachekey);   ,}   ,/* *   ,*秒杀入口   ,*/,public  function 指数()   ,{   ,id 美元;=,1,,//商品编的号   ,   ,if (空($ id)), {   ,//记录失败日志   ,return 这→美元writeLog(0, & # 39;商品编号不存在& # 39;),,   ,}      ,//计算库存列表长度   美元,美元count =,这→复述→llen ($ this→cachekey);      ,//先判断库存是否为0,为0秒杀失败,不为0,则进行先移除一个元素,再进行数据库操作   ,if  (count 美元;==,0),{,//库存为0      ,$ this→writeLog(0, & # 39;库存为0 & # 39;);   ,echo “库存为0“;;   ,退出;      ,其他}{   ,//有库存   ,//先移除一个列表元素   ,$ this→复述→lpop ($ this→cachekey);      美元,美元ordersn =,这→build_order_no();,//生成订单   ,uid 美元;=,兰德(0,9999);,//随机生成用户id   ,status 美元;=,1;   ,//再进行数据库操作   ,data 美元;=,Db:表(& # 39;ab_goods& # 39;)→字段(& # 39;统计,金额# 39;)→地方(& # 39;id # 39; $ id)→找到();,//查找商品      ,if  (! $ data), {   ,return 这→美元writeLog(0, & # 39;该商品不存在& # 39;);   ,}      ,insert_data 美元;=,(   ,& # 39;order_sn& # 39;,=祝辞,ordersn美元,   ,& # 39;user_id # 39;,=祝辞,uid美元,   ,& # 39;goods_id& # 39;,=祝辞,id,美元   ,& # 39;价格# 39;,=祝辞,$ data[& # 39;数量,),   ,& # 39;状态# 39;,=祝辞,美元的地位,   ,& # 39;addtime& # 39;,=祝辞,日期(& # 39;Y-m-d  H:我:& # 39;)   ,);      ,//订单入库   ,result 美元;=,Db:表(& # 39;ab_order& # 39;)→插入($ insert_data);   ,//自动减少一个库存   ,res 美元;=,Db:表(& # 39;ab_goods& # 39;)→地方(& # 39;id # 39; $ id)→setDec(& # 39;计数# 39;);      美元,if  (res), {   echo “第“。干净自己的美元数件秒杀成功“;   ,$ this→writeLog(& # 39;秒杀成功& # 39;);   ,其他}{   echo “第“。干净自己的美元数件秒杀失败“;   ,$ this→writeLog(0, & # 39;秒杀失败& # 39;);   ,}   ,}   ,}/* *   ,*生成订单号   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Thinkphp5中使用复述,实现一个商品秒杀功能