minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis é um sistema de armazenamento de valor-chave de alto desempenho e suas múltiplas estruturas de dados o tornam a escolha ideal para implementar filas de mensagens. Este artigo explorará como usar as estruturas de dados List, Pub/Sub e Stream do Redis para implementar um sistema eficiente de fila de mensagens.
Uma fila de mensagens é um mecanismo de comunicação entre aplicativos que permite que os aplicativos enviem e recebam mensagens de forma assíncrona. É usado em sistemas distribuídos para desacoplar componentes de serviço e melhorar a escalabilidade e a confiabilidade do sistema.
Lista é uma das estruturas de dados básicas do Redis e pode ser usada como uma fila de mensagens simples.
LPUSH
O comando insere a mensagem no cabeçalho da Lista.BRPOP
O comando bloqueia a mensagem do final da Lista.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub é um modelo de publicação e assinatura de mensagens que pode realizar a entrega de mensagens um para muitos.
PUBLISH
O comando publica mensagens no canal especificado.SUBSCRIBE
Comando para se inscrever no canal e receber mensagens.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream é uma nova estrutura de dados persistente introduzida no Redis 5.0, especialmente projetada para fila de mensagens e funções de registro.
XADD
O comando adiciona uma mensagem ao Stream.XREAD
O comando lê mensagens do Stream.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
O comando adiciona uma mensagem ao Stream.XREAD
O comando lê mensagens do Stream.XREADGROUP
O comando implementa a função de grupo de consumidores.A seguir está um exemplo simples de script Lua para implementar operações básicas de produtores e consumidores.
-- 生产者脚本
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)
Os grupos de consumidores são um recurso do Redis Stream que permite que várias instâncias de consumidores coordenem seu trabalho e consumam mensagens em conjunto no Stream.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
O uso de scripts Lua e Redis Stream para implementar filas de mensagens pode aproveitar ao máximo o alto desempenho do Redis e a atomicidade dos scripts Lua para construir um sistema de fila de mensagens eficiente e confiável. O recurso de grupos de consumidores aumenta ainda mais a disponibilidade e a escalabilidade das filas de mensagens.
O Redis oferece diversas maneiras de implementar filas de mensagens, cada uma com seus cenários aplicáveis. List é adequado para requisitos de fila simples, Pub/Sub é adequado para modo de publicação/assinatura e Stream fornece funções de fila de mensagens mais poderosas, incluindo persistência, grupos de consumidores e outros recursos.