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

主頁(yè) > 知識(shí)庫(kù) > PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解

PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解

熱門標(biāo)簽:哪里辦理400電話 廣州防封卡外呼系統(tǒng)多少錢一個(gè)月 怎么向銷售公司推銷外呼系統(tǒng) 江西手機(jī)自動(dòng)外呼防封系統(tǒng)是什么 長(zhǎng)春人工外呼系統(tǒng)服務(wù)商 外呼系統(tǒng)撥打暫時(shí)無(wú)法接通 廣東地市地圖標(biāo)注 仁和怎么申請(qǐng)400開(kāi)頭的電話 高德地圖標(biāo)注家

本文實(shí)例講述了PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能。分享給大家供大家參考,具體如下:

  • redis不僅僅是單純的緩存,它還有一些特殊的功能,在一些特殊場(chǎng)景上很好用。redis中key的原子自增incrby和判斷key不存在再寫入的setnx方法,可以有效的防止超發(fā)。
  • 下面使用兩個(gè)不同的方式來(lái)說(shuō)明利用redis做商品購(gòu)買庫(kù)存數(shù)量限制。
  • 業(yè)務(wù)場(chǎng)景很簡(jiǎn)單,就是限制搶購(gòu)5個(gè)商品,模擬并發(fā)請(qǐng)求搶購(gòu)商品,每搶購(gòu)一次對(duì)應(yīng)redis中的key值增加一次,通過(guò)判斷限購(gòu)的數(shù)量來(lái)限制搶購(gòu),搶購(gòu)成功寫入成功日志,失敗寫入失敗的信息記錄,通過(guò)記錄的數(shù)量來(lái)判斷是否超發(fā)。

文件index.php

?php
require_once './myRedis.php';
require_once './function.php';
class sendAward{
  public $conf = [];
  const V1 = 'way1';//版本一
  const V2 = 'way2';//版本二
  const AMOUNTLIMIT = 5;//搶購(gòu)數(shù)量限制
  const INCRAMOUNT = 1;//redis遞增數(shù)量值
  //初始化調(diào)用對(duì)應(yīng)方法執(zhí)行商品發(fā)放
  public function __construct($conf,$type){
    $this->conf = $conf;
    if(empty($type))
      return '';
    if($type==self::V1){
      $this->way1(self::V1);
    }elseif($type==self::V2){
      $this->way2(self::V2);
    }else{
      return '';
    }
  }
  //搶購(gòu)商品方式一
  protected function way1($v){
    $redis = new myRedis($this->conf);   
    $keyNmae = getKeyName($v);
    if(!$redis->exists($keyNmae)){
      $redis->set($keyNmae,0);
    }
    $currAmount = $redis->get($keyNmae);
    if(($currAmount+self::INCRAMOUNT)>self::AMOUNTLIMIT){
      writeLog("沒(méi)有搶到商品",$v);
      return;
    }
    $redis->incrby($keyNmae,self::INCRAMOUNT);
    writeLog("搶到商品",$v);
  }
  //搶購(gòu)商品方式二
  protected function way2($v){
    $redis = new myRedis($this->conf);
    $keyNmae = getKeyName($v);
    if(!$redis->exists($keyNmae)){
      $redis->setnx($keyNmae,0);
    }
    if($redis->incrby($keyNmae,self::INCRAMOUNT) > self::AMOUNTLIMIT){
      writeLog("沒(méi)有搶到商品",$v);
      return;
    }
    writeLog("搶到商品",$v);
  }
}
//實(shí)例化調(diào)用對(duì)應(yīng)執(zhí)行方法
$type = isset($_GET['v'])?$_GET['v']:'way1';
$conf = [
  'host'=>'192.168.0.214','port'=>'6379',
  'auth'=>'test','db'=>2,
];
new sendAward($conf,$type);

文件myRedis.php

?php
/**
 * @desc 自定義redis操作類
 * **/
class myRedis{
  public $handler = NULL;
  public function __construct($conf){
    $this->handler = new Redis();
    $this->handler->connect($conf['host'], $conf['port']); //連接Redis
    //設(shè)置密碼
    if(isset($conf['auth'])){
      $this->handler->auth($conf['auth']); //密碼驗(yàn)證
    }
    //選擇數(shù)據(jù)庫(kù)
    if(isset($conf['db'])){
      $this->handler->select($conf['db']);//選擇數(shù)據(jù)庫(kù)2
    }else{
      $this->handler->select(0);//默認(rèn)選擇0庫(kù)
    }
  }
  //獲取key的值
  public function get($name){
    return $this->handler->get($name);
  }
  //設(shè)置key的值
  public function set($name,$value){
    return $this->handler->set($name,$value);
  }
  //判斷key是否存在
  public function exists($key){
    if($this->handler->exists($key)){
      return true;
    }
    return false;
  }
  //當(dāng)key不存在的設(shè)置key的值,存在則不設(shè)置
  public function setnx($key,$value){
    return $this->handler->setnx($key,$value);
  }
  //將key的數(shù)值增加指定數(shù)值
  public function incrby($key,$value){
    return $this->handler->incrBy($key,$value);
  }
}

文件function.php

?php
//獲取商品key名稱
function getKeyName($v)
{
  return "send_goods_".$v;
}
//日志寫入方法
function writeLog($msg,$v)
{
  $log = $msg.PHP_EOL;
  file_put_contents("log/$v.log",$log,FILE_APPEND);
}

1.ab工具并發(fā)測(cè)試way1方法

[root@localhost oversend]# ab -c 100 -n 200 http://192.168.0.213:8083/index.php?v=way1
This is ApacheBench, Version 2.3 $Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.0.213 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software:    nginx
Server Hostname:    192.168.0.213
Server Port:      8083
Document Path:     /index.php?v=way1
Document Length:    0 bytes
Concurrency Level:   100
Time taken for tests:  0.089 seconds
Complete requests:   200
Failed requests:    0
Write errors:      0
Total transferred:   30600 bytes
HTML transferred:    0 bytes
Requests per second:  2243.13 [#/sec] (mean)
Time per request:    44.581 [ms] (mean)
Time per request:    0.446 [ms] (mean, across all concurrent requests)
Transfer rate:     335.16 [Kbytes/sec] received
Connection Times (ms)
       min mean[+/-sd] median  max
Connect:    0  6  2.2   5   17
Processing:   2  28 16.3   25   55
Waiting:    1  26 15.2   24   50
Total:     5  34 16.3   30   60
Percentage of the requests served within a certain time (ms)
 50%   30
 66%   35
 75%   54
 80%   56
 90%   57
 95%   60
 98%   60
 99%   60
 100%   60 (longest request)

v1方法日志分析

[root@localhost log]# less -N way1.log 
   1 搶到商品
   2 搶到商品
   3 搶到商品
   4 搶到商品
   5 搶到商品
   6 搶到商品
   7 沒(méi)有搶到商品
   8 沒(méi)有搶到商品
   9 沒(méi)有搶到商品
   10 沒(méi)有搶到商品
   11 沒(méi)有搶到商品
   12 沒(méi)有搶到商品

觀察日志發(fā)現(xiàn) 搶到商品的記錄有6條超過(guò)正常的5條,說(shuō)明超發(fā)了

2.ab工具并發(fā)測(cè)試way2方法

[root@localhost oversend]# ab -c 100 -n 200 http://192.168.0.213:8083/index.php?v=way2
This is ApacheBench, Version 2.3 $Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.0.213 (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software:    nginx
Server Hostname:    192.168.0.213
Server Port:      8083
Document Path:     /index.php?v=way2
Document Length:    0 bytes
Concurrency Level:   100
Time taken for tests:  0.087 seconds
Complete requests:   200
Failed requests:    0
Write errors:      0
Total transferred:   31059 bytes
HTML transferred:    0 bytes
Requests per second:  2311.68 [#/sec] (mean)
Time per request:    43.259 [ms] (mean)
Time per request:    0.433 [ms] (mean, across all concurrent requests)
Transfer rate:     350.58 [Kbytes/sec] received
Connection Times (ms)
       min mean[+/-sd] median  max
Connect:    0  6  5.4   5   13
Processing:   3  31 16.6   30   70
Waiting:    1  30 16.6   30   70
Total:     5  37 18.5   32   82
Percentage of the requests served within a certain time (ms)
 50%   32
 66%   41
 75%   45
 80%   50
 90%   68
 95%   80
 98%   81
 99%   82
 100%   82 (longest request)

v2方法日志分析

[root@localhost log]# less -N v2.log 
[root@localhost log]# less -N way2.log 
   1 搶到商品
   2 搶到商品
   3 搶到商品
   4 搶到商品
   5 沒(méi)有搶到商品
   6 搶到商品
   7 沒(méi)有搶到商品
   8 沒(méi)有搶到商品
   9 沒(méi)有搶到商品
   10 沒(méi)有搶到商品

總結(jié):觀察日志可知搶到商品的日志記錄是5條并沒(méi)有超發(fā),說(shuō)明利用這種方式可以限制住庫(kù)存的數(shù)量。之所以超發(fā)是因?yàn)榉椒ㄒ恢型ㄟ^(guò)加法來(lái)判斷限制條件的同時(shí),并發(fā)一大,就會(huì)越過(guò)這個(gè)判斷條件出現(xiàn)會(huì)超發(fā),redis的在這方面就體現(xiàn)優(yōu)勢(shì)了。

完整代碼github地址

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php+redis數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP基本語(yǔ)法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP Redis擴(kuò)展無(wú)法加載的問(wèn)題解決方法
  • thinkPHP框架通過(guò)Redis實(shí)現(xiàn)增刪改查操作的方法詳解
  • PHP商品秒殺問(wèn)題解決方案實(shí)例詳解【mysql與redis】
  • PHP+Redis鏈表解決高并發(fā)下商品超賣問(wèn)題(實(shí)現(xiàn)原理及步驟)

標(biāo)簽:湘西 海北 黔東 梅河口 惠州 濮陽(yáng) 文山 廈門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解》,本文關(guān)鍵詞  PHP+redis,實(shí)現(xiàn),的,限制,搶購(gòu),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP+redis實(shí)現(xiàn)的限制搶購(gòu)防止商品超發(fā)功能詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲免费观看高清完整版在线观看| 精品国产乱码久久久久久蜜臀| 26uuu精品一区二区三区四区在线| 蜜桃av一区二区三区电影| 91精品婷婷国产综合久久| 免费成人在线网站| 中文字幕免费一区| 色呦呦国产精品| 国产精品一级在线| 亚洲妇熟xx妇色黄| 久久奇米777| 欧美主播一区二区三区美女| 九九九精品视频| 亚洲欧美另类图片小说| 91精品久久久久久久91蜜桃| 丁香激情综合五月| 三级影片在线观看欧美日韩一区二区| 亚洲一二三区视频在线观看| 国产亚洲制服色| 在线播放91灌醉迷j高跟美女 | 91免费国产在线| 福利一区福利二区| 国产91在线看| 久久99热狠狠色一区二区| 久久久五月婷婷| 在线观看国产日韩| 国产精品1区二区.| 夜夜嗨av一区二区三区| 欧美成人一区二区| 99久久国产综合色|国产精品| 五月天激情小说综合| 日本一区二区免费在线观看视频| 99久久综合精品| 黄页视频在线91| 亚洲精品高清在线| 精品国产精品一区二区夜夜嗨| 色先锋资源久久综合| 久久99热狠狠色一区二区| 亚洲一区中文在线| 不卡视频在线看| 亚洲成人一区在线| 国产a区久久久| 精品国产免费一区二区三区香蕉| 视频在线观看一区二区三区| 91麻豆精品秘密| 欧美成人艳星乳罩| 91麻豆文化传媒在线观看| 一二三区精品福利视频| 国产91高潮流白浆在线麻豆| 亚洲成人免费看| 在线日韩av片| 亚洲视频 欧洲视频| 中文字幕乱码日本亚洲一区二区| 美女一区二区视频| 99久久精品国产麻豆演员表| 欧美日韩国产中文| 日韩制服丝袜先锋影音| 在线播放亚洲一区| 一本到三区不卡视频| 国产一区二区在线免费观看| 日本二三区不卡| 日韩免费电影一区| 色婷婷狠狠综合| 91精品国产色综合久久久蜜香臀| 成人激情电影免费在线观看| 久久se精品一区二区| 精品国产免费久久| 中文字幕一区二区三区四区不卡| 亚洲成人tv网| 毛片av一区二区三区| 日韩女优av电影在线观看| 国产精品2024| 亚洲黄色片在线观看| 欧美一级xxx| 国产日产欧美一区二区视频| ...xxx性欧美| 午夜视频一区二区三区| 国产精品影视在线| 日韩免费高清视频| 亚洲精品一区二区三区精华液| 国产农村妇女毛片精品久久麻豆| 亚洲天堂av一区| 奇米四色…亚洲| 成人激情文学综合网| 国产一区二区久久| 色偷偷88欧美精品久久久| 日韩一区二区三区av| 欧美激情在线观看视频免费| 亚洲韩国一区二区三区| 国产精品99久久久| 欧美丝袜第三区| 久久理论电影网| 亚洲a一区二区| 丁香一区二区三区| 欧美日韩在线播放| 国产亚洲综合在线| 亚洲成人自拍偷拍| 成人午夜电影网站| 欧美一区二区播放| 亚洲综合一二区| 国产成人精品一区二| 欧美高清视频不卡网| 亚洲欧洲三级电影| 精品无人区卡一卡二卡三乱码免费卡| 不卡一二三区首页| 欧美不卡视频一区| 亚洲 欧美综合在线网络| 成人av片在线观看| 久久久99精品久久| 五月婷婷激情综合网| 91女人视频在线观看| 亚洲精品在线观看网站| 午夜精品久久一牛影视| 91视频免费看| 亚洲国产成人在线| 国产久卡久卡久卡久卡视频精品| 国产一区高清在线| 欧美久久久一区| 亚洲色图欧美在线| 日韩中文字幕亚洲一区二区va在线| 色综合天天综合网国产成人综合天| 777亚洲妇女| 亚洲国产日产av| 日本韩国一区二区三区| 1区2区3区精品视频| 成人亚洲精品久久久久软件| 精品成人一区二区| 经典三级在线一区| 精品国产乱码久久久久久闺蜜| 日韩av网站免费在线| 欧美日韩高清影院| 亚洲福利视频一区二区| 在线观看日韩一区| 亚洲精品欧美综合四区| 色综合久久久久综合99| 亚洲日本在线天堂| 成人a级免费电影| 国产精品成人网| 99国产精品国产精品久久| 1024精品合集| 在线观看91视频| 亚洲1区2区3区4区| 91精品国产综合久久婷婷香蕉| 日韩精品一级中文字幕精品视频免费观看 | 国产精品理论在线观看| 国产精品88av| 久久久久久免费网| 丰满白嫩尤物一区二区| 欧美国产精品一区二区三区| 国产91露脸合集magnet| 久久亚洲欧美国产精品乐播| 国产福利91精品一区二区三区| 久久久www成人免费无遮挡大片| 蜜臀99久久精品久久久久久软件| 欧美精品久久天天躁| 日韩av不卡一区二区| 欧美成人一区二区| 国产成人高清在线| 中文字幕在线观看不卡| 一本色道久久综合亚洲91| 亚洲一区二区三区国产| 91精品国产91综合久久蜜臀| 久久国产精品99久久人人澡| 国产欧美一区二区三区网站 | 日本久久一区二区三区| 亚洲妇熟xx妇色黄| 日韩精品一区二区三区在线| 国产精品一区二区在线观看网站| 国产精品久久久久久久久图文区| 日本高清无吗v一区| 奇米影视7777精品一区二区| 精品国产乱码久久久久久蜜臀 | 欧美一区二区黄色| 国产麻豆一精品一av一免费| 亚洲色图一区二区| 日韩午夜在线影院| 成人伦理片在线| 午夜视频在线观看一区二区| 久久久精品国产免大香伊| 色综合久久综合| 免费观看91视频大全| 亚洲欧洲性图库| 日韩一区二区电影网| 不卡视频一二三| 免费观看成人鲁鲁鲁鲁鲁视频| 国产日韩高清在线| 欧美天天综合网| 国产成人精品一区二区三区四区| 亚洲一区二区三区四区五区中文 | 综合色中文字幕| 欧美巨大另类极品videosbest | 成a人片亚洲日本久久| 亚洲va韩国va欧美va| 久久久.com| 777亚洲妇女| 91丨porny丨最新| 精品制服美女久久| 亚洲精品国产无套在线观| 26uuu欧美| 欧美精品久久99|