婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Thinkphp5+Redis實現商品秒殺代碼實例講解

Thinkphp5+Redis實現商品秒殺代碼實例講解

熱門標簽:黔江400電話如何辦理 OMG地圖標注app 地圖標注視頻廣告入駐 中原區(qū)電話機器人價格 招標自動語音外呼系統 ai電話機器人加盟代理 gps 地圖標注軟件 400電話鄭州申請 電銷機器人便宜的有嗎

環(huán)境:wamp,redis

要求:安裝WAMP,Redis,以及為PHP安裝Redis擴展

秒殺功能大致思路:獲取緩存列表的長度,如果長度(llen)等于0,就停止秒殺,即秒殺失敗,如果長度大于0,則繼續(xù)運行,先從緩存中移除一個元素(lpop),再進行數據庫操作(添加訂單表,商品庫存數量減一),如果再進一個人秒殺,就再走一遍流程,循環(huán)往復。

一、安裝Redis擴展

1.查看PHP版本信息

打開phpinfo.php,查看PHP版本,我的是PHP7.3.4,還有一個需要注意Architecture x64

2.下載擴展文件

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

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

根據自己環(huán)境,選擇合適的版本

3.解壓

解壓下載的壓縮包,并把php_redis.dll、php_redis.pdb和php_igbinary.dll、php_igbinary.pdb四個文件,移至自己PHP版本對應目錄下的ext文件夾下E:\phpstudy_pro\Extensions\php\php7.3.4nts\ext

4.修改php.ini

添加如下代碼:

extension=php_igbinary.dll
extension=php_redis.dll

如果有這兩句可以把前面的分號刪掉,沒有就自己添加上,要注意順序,php_igbinary.dll 要在php_redis.dll 前面

5.重啟Apache

重啟后,再運行phpinfo.php,查看是否安裝成功

二、數據結構

一共三張表,ab_goods商品表,ab_order訂單表,ab_log日志表

商品表

訂單表

日志表 記錄秒殺信息

三、代碼

?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\cache\driver\Redis;

class Miaosha extends Controller
{

 private $redis = null;
 private $cachekey = null; //緩存變量名
 private $basket = []; //私有數組,存放商品信息

 private $store = 50;

 /**
 * 購物車初始化,傳入用戶id
 */
 public function __construct()
 {
 parent::__construct();

 $this->redis = new \Redis(); // 實例化
 $this->redis->connect('127.0.0.1','6379');
 $this->redis->auth('zxf123456');

 }

 /**
 * 秒殺初始化
 */
 public function Ms_init()
 {
 // 刪除緩存列表
 $this->redis->del($this->cachekey);

 $len = $this->redis->llen($this->cachekey);
 $count = $this->store - $len;

 for ($i=0; $i  $count; $i++) { 

 // 向庫存列表推進50個,模擬50個商品庫存
 $this->redis->lpush($this->cachekey,1);
 }

 echo "庫存初始化完成:".$this->redis->llen($this->cachekey);
 }
 

 /**
 * 秒殺入口
 */
 public function index()
 {
 $id = 1; //商品編號
 
 if (empty($id)) {
 // 記錄失敗日志
 return $this->writeLog(0,'商品編號不存在'); 
 }

 // 計算庫存列表長度
 $count = $this->redis->llen($this->cachekey);

 // 先判斷庫存是否為0,為0秒殺失敗,不為0,則進行先移除一個元素,再進行數據庫操作
 if ($count == 0) { //庫存為0

 $this->writeLog(0,'庫存為0');
 echo "庫存為0";
 exit;

 }else{
 // 有庫存
 //先移除一個列表元素
 $this->redis->lpop($this->cachekey);

 $ordersn = $this->build_order_no(); //生成訂單
 $uid = rand(0,9999); //隨機生成用戶id
 $status = 1;
 // 再進行數據庫操作
 $data = Db::table('ab_goods')->field('count,amount')->where('id',$id)->find(); //查找商品

 if (!$data) {
 return $this->writeLog(0,'該商品不存在');
 }

 $insert_data = [
 'order_sn' => $ordersn,
 'user_id' => $uid,
 'goods_id' => $id,
 'price' => $data['amount'],
 'status' => $status,
 'addtime' => date('Y-m-d H:i:s')
 ];

 // 訂單入庫
 $result = Db::table('ab_order')->insert($insert_data);
 // 自動減少一個庫存
 $res = Db::table('ab_goods')->where('id',$id)->setDec('count');

 if ($res) {
 echo "第".$count."件秒殺成功";
 $this->writeLog(1,'秒殺成功');
 }else{
 echo "第".$count."件秒殺失敗";
 $this->writeLog(0,'秒殺失敗');
 }
 }
 }

 /**
 * 生成訂單號
 */
 public function build_order_no()
 {
 return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
 }

 /**
 * 生成日志 1成功 0失敗
 */
 public function writeLog($status = 1,$msg)
 {
 $data['count'] = 1;
 $data['status'] = $status;
 $data['addtime'] = date('Y-m-d H:i:s');
 $data['msg'] = $msg;
 return Db::table('ab_log')->insertGetId($data);
 }

}

四、壓力測試

使用apache壓力測試工具 AB 測試,模擬多用戶秒殺商品,模擬60秒內發(fā)起3000個請求,并發(fā)600次,秒殺50個庫存商品

AB測試相關參數說明

  • -r 指定接收到錯誤信息時不退出程序
  • -t 等待響應的最大時間
  • -n 指定壓力測試總共的執(zhí)行次數
  • -c 用于指定壓力測試的并發(fā)數

1.初始化50個庫存,運行ms_init方法

2.測試   命令行:

E:\phpstudy_pro\Extensions\Apache2.4.39\bin>ab -r -t 60 -n 3000 -c 1000 http://gouwuche.zxf/index/miaosha/index  

  3.檢測數據庫數據

日志表狀態(tài)為1(秒殺成功)的數據有50人,訂單表里的訂單數也是50條,商品表里的商品數量變成了0(測試之前是50),商品秒殺成功完成!

如果不用redis而是直接用mysql的話,商品表訂單的數量count會變成負數,而秒殺成功的人數也多余50人,訂單表里的訂單數量也多余50條(新測),下面是直接用Mysql的例子;

public function sqlMs()
 {
 $id = 1; //商品編號

 $count = 50;
 $ordersn = $this->build_order_no(); //生成訂單
 $uid = rand(0,9999); //隨機生成用戶id
 $status = 1;
 // 再進行數據庫操作
 $data = Db::table('ab_goods')->field('count,amount')->where('id',$id)->find(); //查找商品

 // 查詢還剩多少庫存
 $rs = Db::table('ab_goods')->where('id',$id)->value('count');
 if ($rs = 0) {
 
 $this->writeLog(0,'庫存為0');
 }else{

 $insert_data = [
 'order_sn' => $ordersn,
 'user_id' => $uid,
 'goods_id' => $id,
 'price' => $data['amount'],
 'status' => $status,
 'addtime' => date('Y-m-d H:i:s')
 ];

 // 訂單入庫
 $result = Db::table('ab_order')->insert($insert_data);
 // 自動減少一個庫存
 $res = Db::table('ab_goods')->where('id',$id)->setDec('count');

 if ($res) {
 echo "第".$data['count']."件秒殺成功";
 $this->writeLog(1,'秒殺成功');
 }else{
 echo "第".$data['count']."件秒殺失敗";
 $this->writeLog(0,'秒殺失敗');
 }
 }
 }

到此這篇關于Thinkphp5+Redis實現商品秒殺的文章就介紹到這了,更多相關Thinkphp5+Redis實現商品秒殺內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解PHP解決守護進程Redis假死
  • thinkphp5redis緩存新增方法實例講解
  • PHP使用Redis隊列執(zhí)行定時任務實例講解
  • php基于redis的分布式鎖實例詳解
  • PHP操作Redis常用命令的實例詳解
  • php在linux環(huán)境中如何使用redis詳解
  • php操作redis命令及代碼實例大全
  • php之redis短線重連案例講解

標簽:北京 哈密 日照 阿里 那曲 池州 濟源 孝感

巨人網絡通訊聲明:本文標題《Thinkphp5+Redis實現商品秒殺代碼實例講解》,本文關鍵詞  Thinkphp5+Redis,實現,商品,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Thinkphp5+Redis實現商品秒殺代碼實例講解》相關的同類信息!
  • 本頁收集關于Thinkphp5+Redis實現商品秒殺代碼實例講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成av人片在www色猫咪| 久久在线免费观看| 成人综合婷婷国产精品久久 | 国产精品乡下勾搭老头1| 国产精品自拍三区| 在线免费精品视频| 久久精品一区蜜桃臀影院| 亚洲欧美日韩一区二区三区在线观看| 亚洲www啪成人一区二区麻豆| 视频一区在线播放| 欧美在线一区二区三区| 欧美激情艳妇裸体舞| 经典三级视频一区| 日韩精品在线一区| 日韩高清欧美激情| 欧美性三三影院| 国产精品久久三| 成人国产精品免费| 中文字幕精品在线不卡| 成人av免费在线观看| 26uuu欧美| 久久成人精品无人区| 欧美精品精品一区| 亚洲超碰精品一区二区| 99久久精品免费精品国产| 国产欧美日韩精品在线| 国产一区二区三区精品视频| 久久久99精品久久| 青青草国产精品97视觉盛宴| 精品视频一区三区九区| 日韩精品一卡二卡三卡四卡无卡| 欧美精品高清视频| 毛片不卡一区二区| 欧美精品一区二区三区久久久| 久久精品国产网站| 蜜桃一区二区三区在线| 性做久久久久久| 香蕉乱码成人久久天堂爱免费| 国产精品午夜免费| 欧美色图12p| 美日韩一级片在线观看| 日韩欧美国产综合在线一区二区三区| 丝袜亚洲精品中文字幕一区| 欧美日韩国产综合一区二区三区| 黄色日韩网站视频| 亚洲日本在线视频观看| 国产亚洲欧洲997久久综合| 欧美三级日韩三级国产三级| 国产乱码精品一区二区三| 亚洲成人激情综合网| 国产精品久久三| 国产亚洲欧美激情| 欧美α欧美αv大片| 在线成人小视频| 欧美日韩国产高清一区| 欧美在线不卡视频| 国产成人在线视频网站| 亚洲精品高清在线观看| 亚洲日本va午夜在线电影| 亚洲欧美一区二区三区孕妇| 欧美福利一区二区| 在线不卡中文字幕播放| 欧美日韩国产大片| 日韩欧美综合一区| xfplay精品久久| 国产免费观看久久| 亚洲女同一区二区| 亚洲自拍偷拍麻豆| 男人的天堂久久精品| 亚洲va天堂va国产va久| 香蕉加勒比综合久久| 五月激情综合网| 午夜天堂影视香蕉久久| 午夜精品视频在线观看| 午夜久久久久久| 成人97人人超碰人人99| 不卡视频免费播放| 欧美日韩不卡一区二区| 日韩欧美一区二区在线视频| 精品日韩一区二区三区免费视频| 日韩精品一区二区在线| 久久久91精品国产一区二区精品| 亚洲欧洲三级电影| 久久99九九99精品| 67194成人在线观看| 欧美激情自拍偷拍| 国产99精品在线观看| 亚洲精品在线观| 国产在线不卡一区| 精品国产麻豆免费人成网站| 伊人性伊人情综合网| 91色porny蝌蚪| 一区二区三区自拍| 欧美性猛交一区二区三区精品| 亚洲国产视频在线| 欧美一区二区三区色| 亚洲一区二区在线免费观看视频| 在线亚洲人成电影网站色www| 亚洲成a人v欧美综合天堂下载 | 国产一区二区三区免费| 国产剧情在线观看一区二区| 天天做天天摸天天爽国产一区 | 成人av在线看| 久久国产婷婷国产香蕉| 国产成人在线视频播放| 色婷婷久久久久swag精品| 色综合久久综合| 国产精品午夜在线观看| 欧美一区二区精品在线| 久久精品夜色噜噜亚洲aⅴ| 亚洲欧美另类在线| 国产欧美日韩麻豆91| 一个色在线综合| 亚洲精品中文在线| 国产精品一区二区91| 欧美白人最猛性xxxxx69交| 精品国产sm最大网站免费看| 一个色妞综合视频在线观看| 极品销魂美女一区二区三区| 在线亚洲欧美专区二区| 一区二区日韩av| 91豆麻精品91久久久久久| 日韩欧美成人激情| 免费观看日韩av| 久久人人97超碰com| 艳妇臀荡乳欲伦亚洲一区| 不卡电影一区二区三区| 一区二区三区中文在线观看| 不卡av在线免费观看| 国产亚洲精品bt天堂精选| 国产一区二区福利视频| 国产精品久久久久aaaa樱花| 国产自产v一区二区三区c| 久久综合网色—综合色88| 综合欧美一区二区三区| 欧美精品一级二级| 国产成人在线视频网址| 五月激情六月综合| 久久精品一二三| 99re免费视频精品全部| 蜜桃久久av一区| 亚洲嫩草精品久久| 日韩一区二区不卡| 粉嫩av一区二区三区| 亚洲第四色夜色| 亚洲综合色视频| 久久精品欧美日韩| 欧美一区二区国产| 欧美日韩精品电影| 91碰在线视频| 国产一区二区三区综合| 亚洲成人av免费| 国产免费久久精品| 久久蜜桃av一区二区天堂| 欧美日韩精品三区| 最新热久久免费视频| 久久久777精品电影网影网| 国产suv精品一区二区883| 久久99久久久久| 在线一区二区三区做爰视频网站| 日本不卡视频一二三区| 亚洲免费av网站| 久久美女艺术照精彩视频福利播放| 97久久超碰国产精品| 日本伊人午夜精品| 精品国产一区久久| 欧美理论电影在线| 欧美精品视频www在线观看 | 国产乱理伦片在线观看夜一区| 久久国产剧场电影| 日韩精品一级二级| 欧美一区二区美女| 国产精品成人午夜| 水蜜桃久久夜色精品一区的特点| 久久99国内精品| 日本亚洲免费观看| 成人中文字幕电影| 欧美精品在欧美一区二区少妇| 欧美裸体bbwbbwbbw| 国产欧美精品日韩区二区麻豆天美| 久久嫩草精品久久久精品一| 亚洲国产日日夜夜| 国产69精品久久久久毛片| 欧美视频在线一区二区三区| 精品国产伦一区二区三区观看方式| 欧美激情在线一区二区| 韩国欧美国产1区| 91精彩视频在线| 亚洲欧洲色图综合| 色婷婷激情一区二区三区| www国产成人| 国产一区在线观看麻豆| 欧美精品第1页| 麻豆国产精品一区二区三区 | 国产精品女主播av| 国产在线播放一区三区四| 日韩精品一区二区三区在线播放 | 日本高清视频一区二区| 久久久99精品久久| 国产伦精品一区二区三区视频青涩|