Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie kann das Projekt paralleler gestaltet werden? Verwenden Sie die automatische ID-Inkrementierung, um die Warteschlangenreihenfolge sicherzustellen

零下一度
Freigeben: 2017-05-06 14:57:07
Original
1780 Leute haben es durchsucht

Szenarioanalyse

Hier nehmen wir das Szenario des roten Umschlags als Beispiel. Die Anforderungen sind wie folgt:

    1.红包有个数限制,假设红包的个数限制为X。
    2.红包金额上线限制,假设金额上线为Y。
    3.要求用户抢红包的时候,不超过红包的个数限制X。
    4.要求用户抢红包的时候,不超过红包的金额Y。
    5.每个用户一次红包活动只能抢一个。
Nach dem Login kopieren

Konventionelle Ideen

Hier sind die häufigsten Ideen:

    1.在用户抢红包时,检查当前发出去红包数量和金额,并加锁。
    2.检查红包数量和金额正常的后,随机用户红包金额。
    3.然后修改红包发出去的数量和金额,并给用户赠送红包,然后解锁。
Nach dem Login kopieren

Die Vor- und Nachteile konventioneller Ideen

Die erste ist die Vorteile

    1.思路简单
    2.编不下去了。。。
Nach dem Login kopieren

Dann gibt es noch die Mängel

    1.锁数据回造成大量进程等待,造成浪费资源。
    2.锁造成的等待,用户体验奇差。
    3.对于锁机制不太了解的同学会产生一定的危险性。
Nach dem Login kopieren

Optimierungsideen

Analysieren Sie zunächst, warum sind herkömmliche Ideen langsam?

    1.在抢红包的时候,每次都需要检查红包的上限 X 和 Y。
    2.锁会造成大量进程卡顿。
    3.生成红包的金额时还需要检查与上限 X 跟 Y 是否有冲突。
Nach dem Login kopieren

Optimierungslösung

Vorkonfiguration für die Erzeugung roter Umschläge

Zum Beispiel ist die Obergrenze der Anzahl roter Umschläge X und die Obergrenze der Menge ist Y.
Dann füge ich vor der Veranstaltung diese X roten Umschläge in die Datenbank ein
und erzeuge Seriennummern: HB1, HB2, HB3. . . . HBX

Tatsächlich müssen Benutzer diese geordnete Warteschlange mit roten Umschlägen nur in der richtigen Reihenfolge erhalten.
Dieser Vorgang reduziert viele Berechnungen, die zu diesem Zeitpunkt online durchgeführt werden. Das Wichtigste ist, dass die Kontrollierbarkeit der gesamten Aktivität einfach und effektiv sichergestellt werden kann.

Verwenden Sie die automatische ID-Inkrementierung, um die Warteschlangenreihenfolge sicherzustellen

Hier wird eine ID-Generierungstabelle verwendet und ein eindeutiger Index der Benutzer-ID erstellt, um sicherzustellen, dass jede Person nur eine Seriennummer erhalten kann.

Die Schritte zum Ergreifen roter Umschläge sind wie folgt

    1.活动创建之前,创建一张ID生成表,ID从 1 开始自增,且 user_id 唯一。
    2.活动开始,用户开始抢红包操作。
    3.抢红包之前,先插入ID表,获取插入ID,如果ID > X,通知用户已被抢完。
    4.如果 ID <= X,那么恭喜了,去红包表领取序号为 ID 的红包,并走异步发红包过程。
    5.活动结束之后,把相关用户领取信息存储在红包表,删除ID生成表。
Nach dem Login kopieren

Vorteile der Lösung

    1.不需要代码实现锁机制。
    2.逻辑简单。
    3.mysql保证每个用户只能拿到一个,且有序。
Nach dem Login kopieren

Weitere Gedanken

Einige Freunde haben erwähnt, dass Sie Sie können die Redis-Warteschlange zum Speichern von Informationen zu roten Umschlägen verwenden, aber tatsächlich benötigt Redis mehr Speicher. Wenn Sie Daten über einen längeren Zeitraum speichern müssen, ist es am besten, sie in MySQL abzulegen. Tatsächlich können Sie hier den Befehl incr von redis verwenden, um eine Funktion ähnlich der oben erwähnten ID-Generierungstabelle zu erhalten, die schneller und streng inkrementell ist und das gesamte Projekt paralleler machen kann.

[Verwandte Empfehlungen]

1. Kostenloses MySQL-Online-Video-Tutorial

2.Neuestes MySQL-Handbuch-Tutorial

3. Dinge zum Datenbankdesign

Das obige ist der detaillierte Inhalt vonWie kann das Projekt paralleler gestaltet werden? Verwenden Sie die automatische ID-Inkrementierung, um die Warteschlangenreihenfolge sicherzustellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!