Heim > Backend-Entwicklung > PHP-Tutorial > PHP generiert bei hoher Parallelität einen eindeutigen Identifikationscode

PHP generiert bei hoher Parallelität einen eindeutigen Identifikationscode

WBOY
Freigeben: 2016-08-08 09:06:35
Original
1411 Leute haben es durchsucht

Wie bereits erwähnt, zunächst einmal vielen Dank an alle Experten, die geantwortet haben
Beschreiben Sie das Problem:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Frage ist nun:

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

Wie bereits erwähnt, zunächst einmal vielen Dank an alle Experten, die geantwortet haben
Beschreiben Sie das Problem:

<code>学习PHP过程中想通过实践编写一套推广系统。
推广地址:**http://xxxx.com/N4aF35aS7**
"N4aF35aS7"作为一个识别码。</code>
Nach dem Login kopieren
Nach dem Login kopieren

Die Frage ist nun:

<code>PHP有函数以微秒级别获取字符,但是如果考虑到高
并发(具体有多高不讨论,但需要考虑进来)可能会
有重复?
另外,识别码在生成上有规范:
1.长度固定(8位左右,太长地址不友好)
2.组合形式为大写、小写字母,数字(参考百度网盘分享地址)
3.绝对不重复,这点很重要
4.没什么要求了,再谢谢来回答的人。</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ich möchte eine Methode vorschlagen: Bezeichner vorverarbeiten

  1. Generieren Sie durch den Algorithmus im Voraus absolut eindeutige Identifikatoren. Sie können ihn während dieses Prozesses selbst testen, und da er vorverarbeitet wird, müssen Sie keine Rücksicht auf Zeit und Komplexität des Algorithmus nehmen.

  2. Schreiben Sie die generierte eindeutige Kennung in die Datenbank

  3. Verwenden Sie Lesevorgänge nur in Szenarien mit hoher Parallelität

Das Obige löst hauptsächlich das Problem der schnellen Reaktion bei hoher Parallelität. Wie kann also die Einzigartigkeit sichergestellt werden?
Es gibt zwei Ideen:

  1. Verwenden Sie eine Warteschlange zum Lesen, um sicherzustellen, dass alle Lesevorgänge über eine eindeutige Warteschlange abgeschlossen werden, z. B. mithilfe der Pop-Operation von Redis

  2. Verwenden Sie zu diesem Zeitpunkt einen weiteren Feldbenutzer-ID-Code: update TABLE set userid = $userid where userid = 0 limit 1; und verwenden Sie dann die Benutzer-ID, um die entsprechende Kennung abzufragen.

Abschließend betone ich: Gestalten Sie den Code von Anfang an so sicher wie möglich. Beachten Sie, dass Sicherheitsaspekten hohe Priorität eingeräumt werden muss.
Was sind die Szenarien mit „hoher Parallelität“ in realen Szenarien? Ich möchte nur sagen, dass, wenn etwas schief geht, immer noch der Programmierer die Schuld auf sich nehmen muss.

Wenn die Anforderung absolut nicht repetitiv ist, gibt es meiner Meinung nach zwei Ideen
1. Generieren Sie jedes Mal zufällig neue ID-Daten für die Persistenz und prüfen Sie dann, ob die historischen Daten jedes Mal wiederholt werden generiert (dies erfordert jedoch jedes Mal Daten. Persistenz ist definitiv leistungsintensiver)
2. Akkumulieren Sie gemäß Regeln (z. B. Datums- und Zeitstempel Balabala), damit die generierten Daten nicht wiederholt werden. Sie sollten jedoch überlegen, wie das geht Vermeiden Sie Duplikate bei hoher Parallelität.

Ich möchte eine Frage stellen: Machen Sie sich mehr Sorgen darüber, dass derselbe Identifikationscode in einem gleichzeitigen Zustand generiert wird, oder machen Sie sich mehr Sorgen über die Generierung historischer doppelter Identifikationscodes?

Wenn Sie Bedenken hinsichtlich der Parallelität haben, sollten Sie erwägen, den von Ihnen erwähnten Zeichen auf Mikrosekundenebene eine bestimmte Anzahl von Zufallszahlen hinzuzufügen (jede Zufallszahl kann in ASCII-Zeichen zwischen 48 und 122 umgewandelt werden) und einige hinzufügen mehr Das ist gut. Obwohl es theoretisch keine absolute Nichtwiederholung gibt, dürfte die Wahrscheinlichkeit dennoch sehr gering sein

Wenn Sie über die Wiederholung der Geschichte nachdenken, dann fallen mir die beiden Dinge ein, die ich am Anfang erwähnt habe

Versuchen Sie es mit dem Sperrmechanismus. .

1 Dateien jeweils nur 1 Mal schreiben
2 Da es sich bei Ihnen um ein Werbesystem handelt, ist dieser eindeutige Code einzigartig, solange Sie die Benutzer-ID mitbringen.
3 Wenn ich ein solches Problem mit hoher Parallelität sehe, habe ich Ich habe das Gefühl, untätig zu sein. Es tut wirklich weh. Es gibt wirklich nicht viele Unternehmen im gesamten Internet, die mit hoher Parallelität umgehen möchten, also müssen sie mit so vielen hohen Parallelitäten umgehen. Es fühlt sich an, als wären Frameworks, Systeme, hohe Parallelität und Caching mittlerweile zum Mantra der Programmierer geworden.

Sie können einen Eintrag generieren, ihn in die Datenbank einfügen, einen eindeutigen Index erstellen und die Datenbank Duplikate für Sie entfernen lassen

Generieren Sie eine entsprechende 62-stellige Zeichenfolge basierend auf der eindeutigen ID in der Datenbank.
Viele Artikel analysieren die Regeln kurzer URLs zur Generierung von Hexadezimalzahlen. Theoretisch wird die ID nicht wiederholt und die Zeichenfolge wird nicht wiederholt generiert, aber die Länge ändert sich. Sehen Sie, ob es akzeptabel ist.
Es gibt nicht so viele Dinge mit wirklich hoher Parallelität, daher ist die Anforderung häufig verwendeter Benutzer-IDs auch eine Möglichkeit.

Verwandte Etiketten:
php
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