日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php通过标识加锁,PHP通过加锁实现并发情况下抢码功能

發布時間:2025/3/12 php 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php通过标识加锁,PHP通过加锁实现并发情况下抢码功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于php語言使用加鎖實現并發情況下搶碼功能,特定時間段開放搶碼并不允許開放的碼重復:

需求:搶碼功能

要求:

1、特定時間段才開放搶碼;

2、每個時間段放開的碼是有限的;

3、每個碼不允許重復;

實現:

1、在不考慮并發的情況下實現:

function get_code($len){

$CHAR_ARR = array('1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','X','Y','Z','W','S','R','T');

$CHAR_ARR_LEN = count($CHAR_ARR) - 1;

$code = '';

while(--$len > 0){

$code .= $CHAR_ARR[rand(0,$CHAR_ARR_LEN)];

}

return $code;

}

$pdo = new PDO('mysql:host=localhost;dbname=ci_test','root','root');

//查詢當前時間已發放驗證碼數量

$code_num_rs = $pdo->query("SELECT COUNT(*) as sum FROM code_test");

$code_num_arr = $code_num_rs->fetch(PDO::FETCH_ASSOC);

$code_num = $code_num_arr['sum'];

if($code_num < 1){

sleep(2); //暫停2秒

$code= get_code(6);

var_dump( $pdo->query("INSERT INTO code_test (code,create_time) VALUES ('$code',".time().")") );

}

上述代碼默認滿足當前是開放時間,和碼是不重復的;

在不考慮并發情況下流程:

1)選查詢當前數據庫發放的驗證碼數量;

2)如果還有名額,則生成驗證碼,插入到數據庫,返回驗證碼到客戶端;

3)如果已滿;則返回提示,已無名額;

2、并發情況下實現:

那么看下上面代碼在并發情況下得到的結果:

測試并發,可以使用apache benchmark來測試,apache benchmark是APACHE旗下的HTTP SERVER的性能評測工具,通過cmd進入到apche的bin目錄下,通過ab命令調用,如:ab -c 并發數量 -n 總訪問量 url。

這樣就是100個用戶同事去搶1個名額,在查詢的時候,每個用戶都查詢到還有一個名額,則會去生成驗證碼,插入數據庫,返回驗證碼;這樣就造成了驗證碼發多了。事實上,運行完該命令,數據庫多了13條記錄,而不是一條。

怎么避免這情況發生呢?

可以通過加排他鎖來鎖定判斷到插入這個過程,保證這個判斷流程任意一時間只有一個進程在運行。

實現如下:

//生成碼

function get_code($len){

$CHAR_ARR = array('1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','X','Y','Z','W','S','R','T');

$CHAR_ARR_LEN = count($CHAR_ARR) - 1;

$code = '';

while(--$len > 0){

$code .= $CHAR_ARR[rand(0,$CHAR_ARR_LEN)];

}

return $code;

}

$pdo = new PDO('mysql:host=localhost;dbname=ci_test','root','root');

$fp = fopen('lock.txt','r');

//通過排他鎖 鎖定該過程

if(flock($fp,LOCK_EX)){

//查詢當前時間已發放驗證碼數量

$code_num_rs = $pdo->query("SELECT COUNT(*) as sum FROM code_test");

$code_num_arr = $code_num_rs->fetch(PDO::FETCH_ASSOC);

$code_num = $code_num_arr['sum'];

if($code_num < 1){

sleep(2);

$code= get_code(6);

var_dump( $pdo->query("INSERT INTO code_test (code,create_time) VALUES ('$code',".time().")") );

}

flock($fp,LOCK_UN);

fclose($fp);

}

總結

以上是生活随笔為你收集整理的php通过标识加锁,PHP通过加锁实现并发情况下抢码功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91av不卡 | 一本一道久久a久久精品蜜桃 | 久久亚洲综合国产精品99麻豆精品福利 | 97国产在线观看 | 国产精品热久久 | 午夜一区不卡 | 亚洲人午夜射精精品日韩 | 激情自拍视频 | 精品国产91乱码一区二区三区 | 无码免费一区二区三区 | 一级片aaaa| 国产又好看的毛片 | 一个色在线 | 日本三级日本三级日本三级极 | 亚洲图片自拍偷拍区 | 特黄三级又爽又粗又大 | 国语对白一区二区 | 国产视频一二三区 | 涩涩97| 久久一热| 亚洲精品动漫在线观看 | 少妇在线 | 国产吃瓜在线 | 亚洲第三色 | 久久精品福利 | 午夜精品久久久久久久久久蜜桃 | 美女免费网站 | 永久精品网站 | 国产最新视频在线 | 中文字幕精品一二三四五六七八 | 天堂精品久久 | h片在线免费看 | 天天爱夜夜爱 | 亚洲色图88| 亚洲成人精选 | 精品产国自在拍 | 欧美日韩小视频 | 人妻熟女一区二区三区 | 东京热一本视频一区 | www.国产黄色 | 亚洲色图日韩 | 久久精品国产亚洲av成人 | 成人毛片在线 | 国产高清一区二区三区 | 久久久久久99精品 | 日韩一级免费看 | 狠狠躁夜夜躁人人爽天天高潮 | 亚洲午夜精品久久久久久app | 精品成在人线av无码免费看 | 草草影院最新网址 | 三级黄在线观看 | 国内精品第一页 | 日日摸日日添日日躁av | 午夜黄色大片 | 夜夜春夜夜爽 | 国产一区不卡在线 | 在线观看91 | 国产主播第一页 | 久久久久久久久97 | 日本资源在线 | 黄视频在线| 日本九九热| 精品一二区 | 久久视频免费在线观看 | 免费成人看片 | 自拍中文字幕 | 黄色男人的天堂 | 国产911在线观看 | 亚洲综合影院 | 天堂av在线免费观看 | 日本a视频在线观看 | 在线成人一区 | 日韩插| 精品在线视频免费观看 | 亚洲网站色 | 亚洲一区二区三区四区在线观看 | 99久久婷婷国产综合精品电影 | 成人免费久久 | 欧洲黄色网 | 中文字幕一区二区三区精彩视频 | 福利二区三区 | 亚洲免费成人在线 | 国产精品资源网站 | 玖草视频在线观看 | 91嫩草入口 | 日韩欧美视频免费观看 | 伊人婷婷综合 | 一区二区导航 | 一区二区三区四区av | 强迫凌虐淫辱の牝奴在线观看 | 污污视频在线免费看 | av导航福利| 大尺度床戏视频 | 亚洲av无码国产精品麻豆天美 | 国产精品一色哟哟哟 | 中文字幕亚洲视频 | 国产在线毛片 | 中文字幕一区二区三区在线播放 | 国产又粗又猛又爽又黄的网站 |