Caching wird von vielen Websites verwendet, insbesondere bei hoher Parallelität ist Caching unerlässlich. Dieser Artikel basiert auf Phalapi und erklärt die tatsächliche Verwendung von zwischengespeicherten Redis. Ich hoffe, dass er für alle hilfreich ist.
Vorwort
Wenn wir ein Projekt entwickeln, können wir auf viele Probleme stoßen, z. B. auf Nachrichten-Push, das Senden von E-Mails, das Senden von Textnachrichten und Fehler bei der Parallelität Lassen Sie uns als Nächstes über die tatsächliche Verwendung von zwischengespeicherten Redis zur Lösung praktischer Probleme sprechen und einen kurzen Blick auf das Redis-Erweiterungsdokument werfen und lesen Sie diesen Abschnitt.
1. Welche Probleme können gelöst werden?
Wenn wir eine Technologie verwenden, nutzen wir sie natürlich, um Probleme zu lösen Können wir bestimmte Probleme mithilfe der Caching-Technologie Redis lösen?
1.1 Cache-Ergebnismenge
Hier ist ein Beispiel und Sie werden verstehen, was zwischengespeicherte Ergebnismenge bedeutet, nachdem Sie es sich angesehen haben
//从缓存redis的clubcache库中查询club表where条件是city,city值是$city $cache = DI()->redis->get_Time('club'.'city'.$city,'clubcache'); //如果查询到了就直接返回缓存的结果 if($cache){ return $cache; } //如果不存在从数据库里面获取结果然后存入redis缓存key的条件和取值时一样,最后一个参数为过期时间 $rs = $this->getORM()->select('*')->where('city',$city)->fetchAll(); DI()->redis->set_Time('club'.'city'.$city,$rs,'clubcache',600);
Was wir oben tun, ist, die Ergebnisse 600 Sekunden lang zu speichern. Eine erneute Abfrage innerhalb von 600 Sekunden führt zu denselben Ergebnissen
1.2 Warteschlangenverarbeitung
Es gibt einen Vergleich in der von Redis verwendeten Zeit Die Schlüsselfunktion ist die Warteschlange
Lassen Sie uns zunächst einige spezielle Redis-Funktionen durchgehen
//写入队列左边 set_lPush //写入队列左边 如果value已经存在,则不添加 set_lPushx //写入队列右边 set_rPush //写入队列右边 如果value已经存在,则不添加 set_rPushx //读取队列左边 get_lPop //读取队列右边 get_rPop //读取队列左边 如果没有读取到阻塞一定时间 get_blPop //读取队列右边 如果没有读取到阻塞一定时间 get_brPop
Zum Beispiel, wenn wir Geschäfte wie Nachrichten-Push, E-Mail und Textnachrichten tätigen, Wir Die Anforderungsgeschwindigkeit einer Drittanbieter-Schnittstelle wird beispielsweise von der Drittanbieter-Schnittstelle bestimmt. Wenn diese in unser API-Geschäft integriert wird, sinkt die Geschwindigkeit des Benutzerzugriffs Um dieses Problem zu lösen, besteht die Lösung des Problems darin, dass der Warteschlangenprozess wie folgt abläuft:
Wenn wir eine Push-Anfrage vom Benutzer erhalten
nach links)
↓
Im Hintergrund läuft ein PHP-Skript, das die Warteschlange gelesen hat (Lesen von rechts erfolgt als „Last In Last Out“, Lesen von links erfolgt als „First In First Out“)
↓
Führen Sie dann die Push-Logik der Antwort aus.
Im Allgemeinen ist unser Skript ein toter Zyklus oder eine normale Shell-Anfrage. Wir verwenden die Daten, die die Daten nicht lesen können, um die Lösung zu finden zu den Unfähigen. Das Problem des zu schnellen Wertrecyclings
1.3 Temporäre Datenspeicherung
Temporäre Daten brauchen nicht allzu viele Erklärungen, ein Beispiel reicht aus
Zum Beispiel , wir bekommen den Bestätigungscode. Müssen wir den Bestätigungscode in der Bibliothek speichern? Ich denke, das ist nicht notwendig und die Datenbank ist nicht einfach, um abgelaufene Vorgänge auszuführen Wir verwenden Redis, um den Bestätigungscode in Redis zu speichern. Durch Angabe einer Ablaufzeit kann dieses Problem sehr gut gelöst werden
1.4 Datenbank
Die Verwendung von Redis als Datenbank ist eine relativ ausführliche Verwendung Sprechen Sie hier über meine Gedanken
Nachdem alle Dienste verteilt werden können, ist die Verteilung für die meisten Datenbanken nicht einfach, was dazu führt, dass viele Systeme in der Datenbank gespleißt und gestapelt werden Sie können den Cache verwenden, um die Ergebnismenge zu speichern. Diese Lösung ist jedoch praktisch und behandelt die Symptome und nicht die Grundursache. Bei der Diskussion über Kinderschuhe haben wir eine praktische Lösung gefunden, nämlich die Verwendung von Redis als erstes Datenbank und MySQL als Metadatendatenbank
Nach diesem Vorgang synchronisiert der Server automatisch die heißen Daten mit Redis und speichert die kalten Daten in MySQL. Wenn kalte Daten verwendet und in Redis gespeichert werden, sind dies die meisten Benutzer Operationen basieren im Wesentlichen auf Redis-Operationen.
Die Kosten einer solchen Implementierung sind relativ hoch. Die Implementierung der Redis-Datensynchronisierungskapselung, die Verwendung von Where-Abfragen usw. wird viel Aufwand betreiben In der späteren Phase plane ich eine allgemeine Erweiterung
2. Standardisierte Verwendung
Tatsächlich wurden die oben genannten Kategorien fast abgedeckt Okay, warum müssen Sie einen separaten Absatz herausnehmen, um über die Spezifikationen zu sprechen? Wenn Sie den Cache überprüfen müssen, sind alle Daten in einer Redis-Bibliothek gesammelt schmerzhaft
Aber Redis unterstützt mehrere Bibliotheken, daher sind eine Reihe von Spezifikationen erforderlich, um sie aufzuteilen. Hier werde ich mitteilen, wie ich sie verwende.
0 bis 10 Bibliotheken werden als normale Geschäftsbibliotheken verwendet. Das heißt, Push-Warteschlangen, temporäre Daten und jede Bibliothek speichert nur Daten für ein Unternehmen. Beispielsweise sind WeChat-Push-Daten in 5 Bibliotheken vorhanden, und E-Mail-Push-Daten sind in 6 Bibliotheken gespeichert. Temporäre Daten zum Senden von Bestätigungscodes werden in 3 gespeichert Bibliotheken usw. Wenn Sie der Meinung sind, dass 10 Bibliotheken nicht ausreichen, können Sie je nach Unternehmen
oder mehr 10 Bibliotheken als Cache-Bibliotheken hinzufügen, um die Ergebnissatzdaten jeder Tabelle oder andere Daten zu speichern
Die Namenskonvention aller Schlüssel muss Typ + Tabellenname + Bedingung haben
Verwandte Empfehlungen:
Beispielanalyse zur Verwendung der PHP-Datei-Cache-Klasse
Analyse zum Ausfall des Redis-Clusters
Das obige ist der detaillierte Inhalt vonVerwendung von Phalapi-Caching und Redis-Erweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!