Verwenden Sie Redis für den Flash-Sale-Bestandsabzug und beschränken Sie jedes Konto auf nur einen Snap-Up. Diese einfache Demo verwendet drei Grundtypen: String, Hash und Liste.
Verwenden Sie int-Werte vom Typ String, um den verbleibenden Bestand zu speichern , und nachdem das Snap-Up erfolgreich war, wird es um 1 reduziert.
Verwenden Sie einen Hash, um die ID des „Snap-Up“-Mitglieds zu speichern (was die Eindeutigkeit der Benutzer-ID als Feld sicherstellen kann). : Die dem Feld dieses Hashs entsprechende UID ist möglicherweise nicht unbedingt ein sofortiger Erfolg Ich habe zuerst geschrieben, dass ich versucht habe, eine String-Bitmap zu verwenden, um zu speichern, ob das Mitglied erfolgreich gekauft hat, aber dies wird bei hoher Parallelität zu Problemen führen, daher wurde es später durch einen eindeutigen Feld-Hash ersetzt
buy.php: Eilkauf
$m_redis = new YourRedisClass(); //redis类很多, 可以自己写, 也可以用predis等 $m_redis->set('rush_stock', 20);//int, 可抢购的商品总数 $m_redis->set('rush_success', 0); //int, 成功的数量 $m_redis->set('rush_fail', 0); //int, 失败的数量 $m_redis->expire('rush_queue_h', 0); //hash, 已加入抢购队列的会员的hash记录表(field是唯一的, 可限制每个uid只有一次), 不一定抢购成功 $m_redis->set('rush_got_uid', ''); //string, 抢购成功的会员uid记录, 只是为了能简单的显示抢到的会员. $m_redis->del('rush_got_uid_l'); //list, 抢购成功的会员uid(方便抢购后的订单批次处理) echo 'success, '.date('Y-m-d H:i:s');
redis-cli führt „mgetrush_stockrush_failrush_successrush_got_uid“aus, um die Initialisierungsdaten zu bestätigen
Derzeit wird der String int zum Speichern des Lagerbestands und der Anzahl verwendet Elemente in der Liste können auch zum Zählen verwendet werden, aber zur Vereinfachung gibt es während der Initialisierung keinen String-Typ UID, die in die Kaufwarteschlange eingegeben wurde, bedeutet nicht unbedingt, dass der Kauf erfolgreich war. Diejenigen, die nicht in die Eilkaufwarteschlange eingegeben wurden, werden nicht in diesem Hash angezeigt und werden direkt abgelehnt, da der Lagerbestand 0,
AB beträgt Stresstest: Machen Sie einfach 500 gleichzeitige Anfragen und versuchen Sie es insgesamt 2.000 Mal (während des Tests unter Win10 600 gleichzeitige Nginx-Aufhänger). Überprüfen Sie die Anzahl möglicher Überausgaben anhand des Werts vonrush_stock
Für Datenoperationen in In der Listenwarteschlange können Sie den Befehl
verwenden, um die FIFO-Datenverarbeitungssequenz zu erreichen.Das obige ist der detaillierte Inhalt vonSo erstellen Sie mit Redis eine Demo der Flash-Sale-Unterstützung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!