Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis es un sistema de almacenamiento de valores clave de alto rendimiento y sus múltiples estructuras de datos lo convierten en una opción ideal para implementar colas de mensajes. Este artículo explorará cómo utilizar las estructuras de datos List, Pub/Sub y Stream de Redis para implementar un sistema de cola de mensajes eficiente.
Una cola de mensajes es un mecanismo de comunicación entre aplicaciones que permite a las aplicaciones enviar y recibir mensajes de forma asincrónica. Se utiliza en sistemas distribuidos para desacoplar componentes de servicio y mejorar la escalabilidad y confiabilidad del sistema.
La lista es una de las estructuras de datos básicas en Redis y puede usarse como una cola de mensajes simple.
LPUSH
El comando inserta el mensaje en el encabezado de la Lista.BRPOP
El comando bloquea el mensaje del final de la Lista.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub es un modelo de suscripción y publicación de mensajes que puede lograr la entrega de mensajes de uno a varios.
PUBLISH
El comando publica mensajes en el canal especificado.SUBSCRIBE
Comando para suscribirse al canal y recibir mensajes.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream es una nueva estructura de datos persistentes introducida en Redis 5.0, especialmente diseñada para colas de mensajes y funciones de registro.
XADD
El comando agrega un mensaje a la secuencia.XREAD
El comando lee mensajes de Stream.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
El comando agrega un mensaje a la secuencia.XREAD
El comando lee mensajes de Stream.XREADGROUP
El comando implementa la función de grupo de consumidores.El siguiente es un ejemplo simple de script Lua para implementar operaciones básicas de productores y 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)
Los grupos de consumidores son una característica de Redis Stream que permite que múltiples instancias de consumidores coordinen su trabajo y consuman mensajes en Stream de forma conjunta.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
El uso de scripts Lua y Redis Stream para implementar colas de mensajes puede aprovechar al máximo el alto rendimiento de Redis y la atomicidad de los scripts Lua para construir un sistema de colas de mensajes eficiente y confiable. La característica de los grupos de consumidores mejora aún más la disponibilidad y escalabilidad de las colas de mensajes.
Redis proporciona múltiples formas de implementar colas de mensajes, cada una de las cuales tiene sus escenarios aplicables. List es adecuado para requisitos de cola simples, Pub/Sub es adecuado para el modo de publicación/suscripción y Stream proporciona funciones de cola de mensajes más potentes, incluida la persistencia, los grupos de consumidores y otras características.