Heim  >  Artikel  >  Datenbank  >  Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code)

Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code)

不言
不言nach vorne
2019-04-12 09:44:245901Durchsuche

Der Inhalt dieses Artikels ist eine Einführung in die Methode zur Realisierung von Flash-Verkäufen (mit Code). Ich hoffe, dass er für Sie hilfreich ist.

Einführung: Jeder muss über Flash-Verkäufe Bescheid wissen. Gleichzeitig muss sichergestellt werden, dass die Daten nicht überverkauft werden und korrekt sind noch ein technischer Test. Leider gab es nie die Möglichkeit, dies im Projekt umzusetzen. Nachdem ich einige weitere Informationen gelesen habe, habe ich vor, zu experimentieren. Der folgende Code dient nur zum Testen. Die Umgebung ist relativ einfach. Bitte ändern Sie ihn entsprechend der tatsächlichen Situation.

Erstellen Sie eine Flash-Sale-Warteschlange

Bevor Sie den Flash-Sale starten, stellen Sie das Produkt zunächst wie folgt in die Warteschlange

/**
     * 创建秒杀列表
     */
    public function createList()
    {
        $count = 30;
        $redisKey = 'goods_list';

        for ($i = 1; $i = $count) {
                break;
            }

            Redis::rpush($redisKey, $i);
        }
    }

Nach der Ausführung anzeigen es in Redis Es gibt 30 Produkt-IDs unter

Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code), und die Daten sind normal.

Flash Sale

Der nächste Schritt besteht darin, den Redis-Befehl lpop zu verwenden, um die Produkt-ID abzurufen und dabei die Atomizität von Redis zu nutzen.

/**
     * 秒杀
     */
    public function buy()
    {
        // 随机用户名,无意义,仅做标记
        $username = Hash::make(now());

        if ($goodsId = Redis::lpop('goods_list')) {
            // 购买成功
            Redis::hset('buy_success', $goodsId, $username);
        } else {
            // 购买失败
            Redis::incr('buy_fail');
        }
    }

Wie oben ist der Code vereinfacht. Nach dem Kauf wird nur der Erfolg oder Misserfolg erfasst. In tatsächlichen Anwendungen wird es natürlich komplizierter sein, aber achten Sie darauf, MySQL nicht synchron zu betreiben. Noch etwas: Hash:make(now()) Auch wenn die Werte gleich sind, werden nicht die gleichen Daten generiert, siehe hier.

Testen

Der letzte Schritt besteht darin, zu testen, ab test zu verwenden und auszuführenab -c 300 -n 3000 http://localhost/buy/. Der obige Befehl bedeutet 300 Parallelität, insgesamt 3000 Anfragen

Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code)

Ausführung abgeschlossen, nicht sehr schnell, und es gab 794 Zugriffsfehler. Mal sehen, ob die Daten korrekt sind. Drucken Sie buy_successWert

Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code)

30 Gewinner auf der Seite aus. Schauen wir uns die Anzahl der fehlgeschlagenen Flash-Verkäufe an

Einführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code), was keine genaue Zahl ist. 2165+30 ist die Anzahl der erfolgreichen Anfragen, was einer Gesamtzahl von 2989 entspricht weniger als 3000.

Schlussfolgerung

Die oben genannten Tests weisen Mängel auf, wie z. B. langsame Reaktionsgeschwindigkeit, fehlgeschlagene Anfragen und ungenaue Fehlerzählungen. Es scheint, dass es viele Stellen zu optimieren gibt, nicht nur die Codeebene. Während des Tests habe ich vergessen, die Zugriffsaufzeichnung auf die Datenbank zu deaktivieren, was einige Auswirkungen haben kann.
Das Gute daran ist, dass die Anzahl der erfolgreichen Flash-Verkäufe korrekt ist und nicht überverkauft wird. [Verwandte Empfehlungen: Redis Tutorial]

Das obige ist der detaillierte Inhalt vonEinführung in die Methode von Redis zur Implementierung von Flash-Verkäufen (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen