le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis è un sistema di archiviazione chiave-valore ad alte prestazioni e le sue molteplici strutture di dati lo rendono la scelta ideale per implementare le code di messaggi. Questo articolo esplorerà come utilizzare le strutture dati List, Pub/Sub e Stream di Redis per implementare un efficiente sistema di code di messaggi.
Una coda di messaggi è un meccanismo per la comunicazione tra applicazioni che consente alle applicazioni di inviare e ricevere messaggi in modo asincrono. Viene utilizzato nei sistemi distribuiti per disaccoppiare i componenti del servizio e migliorare la scalabilità e l'affidabilità del sistema.
L'elenco è una delle strutture dati di base in Redis e può essere utilizzato come una semplice coda di messaggi.
LPUSH
Il comando inserisce il messaggio in testa alla Lista.BRPOP
Il comando blocca il messaggio dalla fine dell'elenco.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub è un modello di pubblicazione e sottoscrizione di messaggi che consente il recapito di messaggi uno-a-molti.
PUBLISH
Il comando pubblica messaggi sul canale specificato.SUBSCRIBE
Comando per iscriversi al canale e ricevere messaggi.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream è una nuova struttura dati persistente introdotta in Redis 5.0, appositamente progettata per le code di messaggi e le funzioni di registrazione.
XADD
Il comando aggiunge un messaggio allo stream.XREAD
Il comando legge i messaggi da Stream.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
Il comando aggiunge un messaggio allo stream.XREAD
Il comando legge i messaggi da Stream.XREADGROUP
Il comando implementa la funzione del gruppo di consumatori.Quello che segue è un semplice esempio di script Lua per implementare le operazioni di base di produttori e consumatori.
-- 生产者脚本
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)
I gruppi di consumatori sono una funzionalità di Redis Stream che consente a più istanze di consumatori di coordinare il proprio lavoro e consumare congiuntamente messaggi nello Stream.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Utilizzando gli script Lua e Redis Stream per implementare le code di messaggi è possibile sfruttare appieno le elevate prestazioni di Redis e l'atomicità degli script Lua per creare un sistema di code di messaggi efficiente e affidabile. La funzionalità dei gruppi di consumatori migliora ulteriormente la disponibilità e la scalabilità delle code di messaggi.
Redis offre diversi modi per implementare le code di messaggi, ognuno dei quali ha i propri scenari applicabili. List è adatto per requisiti di coda semplici, Pub/Sub è adatto per la modalità di pubblicazione/sottoscrizione e Stream fornisce funzioni di coda dei messaggi più potenti, tra cui persistenza, gruppi di consumatori e altre funzionalità.