Ändern Sie die Anforderungsverarbeitung des Instant-Servers in eine asynchrone Verarbeitung, um den Server zu entlasten und die sequentielle Datenerfassung zu realisieren. In diesem Artikel erfahren Sie hauptsächlich, wie Redis Nachrichtenwarteschlangen implementiert, in der Hoffnung, allen zu helfen.
Die Nachrichtenwarteschlange ist für Laien ein Container, der Nachrichten während des Nachrichtenübertragungsprozesses vorübergehend speichert. Er kann Daten zwischen Anwendungen auf verschiedenen Plattformen und in verschiedenen Sprachen übertragen Das Schreiben von Daten kann asynchron implementiert werden, was bei der Bewältigung großer Parallelitätsprobleme eine sehr gute Rolle spielen kann.
Lassen Sie uns über das Szenario sprechen, in dem ich jetzt die Nachrichtenwarteschlange verwende: Mein System muss Anfragen von Kunden in Echtzeit empfangen (periodische Anfragen) und die angeforderten Daten in der Datenbank speichern. Die Datenmenge für jede Anfrage Aufgrund der Notwendigkeit, die Datenbank häufig zu betreiben, kam es jedoch zu Leistungsengpässen. Die ursprüngliche Idee bestand darin, diese Daten direkt in Redis zu speichern. Wenn Sie jedoch sorgfältig darüber nachdenken, ist die Datenmenge jedes Mal nicht groß, da die Daten zyklisch sind und weiter wachsen, obwohl Redis auch eine Persistenzfunktion hat. Wenn Sie sich auf Persistenz verlassen Wenn Sie es auf der Festplatte speichern, verlieren Sie den Vorteil von Redis als In-Memory-Datenbank, sodass Sie sich schließlich für die Verwendung einer Nachrichtenwarteschlange entschieden haben.
Die Methode ist wie folgt:
Die jeweils angeforderten Daten werden direkt in die Nachrichtenwarteschlange geschrieben und anschließend wird eine Antwort an den Client gesendet. Im Hintergrund wird ein Thread geöffnet Überwachen Sie die Nachrichtenwarteschlange, sobald die Daten geschrieben sind. Die Daten werden in die MySQL-Datenbank geschrieben, sodass Echtzeitdaten asynchron in die Datenbank geschrieben werden können, wodurch der durch den direkten Betrieb des Systems verursachte Engpass vermieden wird Datenbank.
Dann stellt sich die Frage, welche Nachrichtenwarteschlange verwendet werden soll. Die gängigeren Nachrichtenwarteschlangen sind jetzt z. B. RabbitMQ, ActiveMQ usw. Ihre Technologie ist relativ ausgereift und sehr effizient. Wenn man jedoch bedenkt, dass das Projekt selbst Redis (zum Zwischenspeichern) verwendet hat und die Datenmenge jedes Mal relativ gering ist, ist Redis nicht nur eine Schlüsselwertdatenbank, sondern unterstützt auch umfangreiche Datentypen wie HashMap, Set, List, usw., unter denen die Liste als Nachrichtenwarteschlange verwendet werden kann und die Redis-Liste Blockierungsbefehle wie blpop und brpop unterstützt, die meine Anforderungen vollständig erfüllen können. Der einfache Testcode lautet wie folgt:
//产生数据 import redis.clients.jedis.Jedis; public class RedisProducer { /** * jedis操作List */ public static void main(String[] args){ Jedis jedis = new Jedis("192.168.10.209", 6379); for(int i = 0;i<10;i++) { jedis.lpush("informList","value_" + i); } jedis.close(); } } //消费数据 import java.util.List; import redis.clients.jedis.Jedis; public class RedisConsumer { /** * jedis操作List */ public static void main(String[] args){ ScheduleMQ mq = new ScheduleMQ(); mq.start(); } } class ScheduleMQ extends Thread { @Override public void run() { while(true) { Jedis jedis = new Jedis("192.168.10.209", 6379); //阻塞式brpop,List中无数据时阻塞 //参数0表示一直阻塞下去,直到List出现数据 List<String> list = jedis.brpop(0, "informList"); for(String s : list) { System.out.println(s); } jedis.close(); } } }
Verwandte Empfehlungen:
PHP So verwenden Sie die Redis-Nachrichtenwarteschlange, um Weibo zu veröffentlichen
Beispielfreigabe für PHP-Implementierung einer Message Queue-Klasse
Message Queue für PHP Advanced Programming
Das obige ist der detaillierte Inhalt vonWie implementiert Redis die Nachrichtenwarteschlange?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!