2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis ist ein leistungsstarkes Schlüsselwertspeichersystem und aufgrund seiner vielfältigen Datenstrukturen die ideale Wahl für die Implementierung von Nachrichtenwarteschlangen. In diesem Artikel wird untersucht, wie Sie die List-, Pub/Sub- und Stream-Datenstrukturen von Redis verwenden, um ein effizientes Nachrichtenwarteschlangensystem zu implementieren.
Eine Nachrichtenwarteschlange ist ein Mechanismus für die Kommunikation zwischen Anwendungen, der es Anwendungen ermöglicht, Nachrichten asynchron zu senden und zu empfangen. Es wird in verteilten Systemen verwendet, um Servicekomponenten zu entkoppeln und die Skalierbarkeit und Zuverlässigkeit des Systems zu verbessern.
Liste ist eine der grundlegenden Datenstrukturen in Redis und kann als einfache Nachrichtenwarteschlange verwendet werden.
LPUSH
Der Befehl fügt die Nachricht in den Kopf der Liste ein.BRPOP
Der Befehl blockiert die Nachricht vom Ende der Liste.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub ist ein Nachrichtenveröffentlichungs- und Abonnementmodell, das eine Eins-zu-Viele-Nachrichtenzustellung ermöglichen kann.
PUBLISH
Der Befehl veröffentlicht Nachrichten im angegebenen Kanal.SUBSCRIBE
Befehl zum Abonnieren des Kanals und Empfangen von Nachrichten.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream ist eine neue persistente Datenstruktur, die in Redis 5.0 eingeführt wurde und speziell für Nachrichtenwarteschlangen- und Protokollierungsfunktionen entwickelt wurde.
XADD
Der Befehl fügt dem Stream eine Nachricht hinzu.XREAD
Der Befehl liest Nachrichten aus Stream.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
Der Befehl fügt dem Stream eine Nachricht hinzu.XREAD
Der Befehl liest Nachrichten aus Stream.XREADGROUP
Der Befehl implementiert die Funktion der Verbrauchergruppe.Das Folgende ist ein einfaches Lua-Skriptbeispiel zur Implementierung grundlegender Operationen von Produzenten und Konsumenten.
-- 生产者脚本
local function produce(streamKey, message)
local result = redis.call('XADD', streamKey, '*', 'message', message)
return result
end
-- 消费者脚本
local function consume(streamKey, groupName, consumerName)
local result = redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, 0)
return result
end
-- 调用脚本
local streamKey = 'myStream'
local message = 'Hello, Redis Stream!'
local groupName = 'myGroup'
local consumerName = 'myConsumer'
-- 生产消息
local messageId = produce(streamKey, message)
-- 消费消息
local messages = consume(streamKey, groupName, consumerName)
Verbrauchergruppen sind eine Funktion von Redis Stream, die es mehreren Verbraucherinstanzen ermöglicht, ihre Arbeit zu koordinieren und gemeinsam Nachrichten im Stream zu konsumieren.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Durch die Verwendung von Lua-Skripten und Redis Stream zum Implementieren von Nachrichtenwarteschlangen können die hohe Leistung von Redis und die Atomizität von Lua-Skripten voll ausgenutzt werden, um ein effizientes und zuverlässiges Nachrichtenwarteschlangensystem aufzubauen. Die Funktion von Verbrauchergruppen verbessert die Verfügbarkeit und Skalierbarkeit von Nachrichtenwarteschlangen weiter.
Redis bietet mehrere Möglichkeiten zum Implementieren von Nachrichtenwarteschlangen, von denen jede ihre eigenen anwendbaren Szenarien hat. List eignet sich für einfache Warteschlangenanforderungen, Pub/Sub eignet sich für den Publish/Subscribe-Modus und Stream bietet leistungsfähigere Nachrichtenwarteschlangenfunktionen, einschließlich Persistenz, Verbrauchergruppen und anderen Funktionen.