Dieser Artikel basiert auf der PHP-Sprache und verwendet Sperren, um die Eilkauffunktion unter gleichzeitigen Umständen zu implementieren. Der Eilkauf ist während eines bestimmten Zeitraums geöffnet und erlaubt keine Vervielfältigung offener Codes. Dieser Artikel ist sehr ausführlich. Bitte lesen Sie ihn bei Bedarf nach. Ich hoffe, es hilft allen.
Anforderungen: Code-Grabbing-Funktion
Anforderungen:
1. Code-Grabbing ist nur während eines bestimmten Zeitraums möglich;
2. Die in jedem Zeitraum veröffentlichten Codes sind begrenzt;
3 Jeder Code darf nicht wiederholt werden
Realisierung:
1. Ohne Berücksichtigung der Parallelität implementiert:
<p style="margin-top: 5px; margin-bottom: 5px;">function get_code($len){<br/>$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');<br/>$CHAR_ARR_LEN = count($CHAR_ARR) - 1;<br/>$code = '';<br/>while(--$len > 0){ $code .= $CHAR_ARR[rand(0,$CHAR_ARR_LEN)]; }<br/>return $code;<br/>}<br/>$pdo = new PDO('mysql:host=localhost;dbname=ci_test','root','root');<br/>//查询当前时间已发放验证码数量<br/>$code_num_rs = $pdo->query("SELECT COUNT(*) as sum FROM code_test");<br/>$code_num_arr = $code_num_rs->fetch(PDO::FETCH_ASSOC);<br/>$code_num = $code_num_arr['sum'];<br/>if($code_num < 1){<br> sleep(2); //暂停2秒<br/>$code = get_code(6);<br/>var_dump( $pdo->query("INSERT INTO code_test (code,create_time) VALUES ('$code',".time().")") );<br/>}<br/></p>
Ohne Berücksichtigung der Parallelität Prozess:
1) Wählen Sie die Anzahl der von der aktuellen Datenbank ausgegebenen Verifizierungscodes aus und fragen Sie sie ab
2) Wenn noch Plätze vorhanden sind, generieren Sie den Verifizierungscode und fügen Sie ihn ein die Datenbank und geben Sie den Bestätigungscode an den Client zurück; in gleichzeitigen Situationen:
Schauen Sie sich dann die Ergebnisse an, die der obige Code im Fall der Parallelität erzielt:
Um die Parallelität zu testen, können Sie den Apache-Benchmark verwenden test. Apache Benchmark ist das Leistungsbewertungstool von HTTP SERVER unter APACHE. Geben Sie über cmd das bin-Verzeichnis von apche ein und rufen Sie es über den Befehl ab auf, z
Sie können den Prozess von der Beurteilung bis zur Einfügung sperren, indem Sie eine exklusive Sperre hinzufügen, um sicherzustellen, dass in diesem Beurteilungsprozess immer nur ein Prozess ausgeführt wird. Die Implementierung ist wie folgt:
<p style="margin-top: 5px; margin-bottom: 5px;">cb -c 100 -n 100 http://localhost/php_mulit.php<br/></p>
Erneut ausführen
Der Datenbank wird nur ein Datensatz hinzugefügt, um sicherzustellen, dass die Daten bei Parallelität korrekt sind.
<p style="margin-top: 5px; margin-bottom: 5px;">//生成码<br/>function get_code($len){<br/>$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');<br/>$CHAR_ARR_LEN = count($CHAR_ARR) - 1;<br/>$code = '';<br/>while(--$len > 0){ $code .= $CHAR_ARR[rand(0,$CHAR_ARR_LEN)]; }<br/>return $code;<br/>}<br/>$pdo = new PDO('mysql:host=localhost;dbname=ci_test','root','root');<br/>$fp = fopen('lock.txt','r');<br/>//通过排他锁 锁定该过程<br/>if(flock($fp,LOCK_EX)){<br/>//查询当前时间已发放验证码数量<br/>$code_num_rs = $pdo->query("SELECT COUNT(*) as sum FROM code_test");<br/>$code_num_arr = $code_num_rs->fetch(PDO::FETCH_ASSOC);<br/>$code_num = $code_num_arr['sum'];<br/>if($code_num < 1){<br/>sleep(2);<br/>$code = get_code(6);<br/>var_dump( $pdo->query("INSERT INTO code_test (code,create_time) VALUES ('$code',".time().")") );<br/>}<br/>flock($fp,LOCK_UN);<br/>fclose($fp);<br/>}<br/></p>
<p style="margin-top: 5px; margin-bottom: 5px;">cb -c 100 -n 100 http://localhost/php_mulit.php<br/></p>
Beispiel, wie PHP ein Online-Adressbuch implementiert
Vergleich von Beispielen, wie PHP große Dateien effizient lesen kann
Das obige ist der detaillierte Inhalt vonPHP implementiert die gleichzeitige Snap-Up-Funktion durch Sperren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!