2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis est un système de stockage clé-valeur hautes performances, et ses multiples structures de données en font un choix idéal pour implémenter des files d'attente de messages. Cet article explique comment utiliser les structures de données List, Pub/Sub et Stream de Redis pour implémenter un système de file d'attente de messages efficace.
Une file d'attente de messages est un mécanisme de communication entre applications qui permet aux applications d'envoyer et de recevoir des messages de manière asynchrone. Il est utilisé dans les systèmes distribués pour découpler les composants de service et améliorer l'évolutivité et la fiabilité du système.
La liste est l'une des structures de données de base de Redis et peut être utilisée comme une simple file d'attente de messages.
LPUSH
La commande insère le message en tête de la Liste.BRPOP
La commande bloque le message depuis la fin de la Liste.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub est un modèle de publication et d'abonnement de messages qui permet la livraison de messages un à plusieurs.
PUBLISH
La commande publie des messages sur le canal spécifié.SUBSCRIBE
Commande pour s'abonner à la chaîne et recevoir des messages.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream est une nouvelle structure de données persistante introduite dans Redis 5.0, spécialement conçue pour les fonctions de file d'attente de messages et de journalisation.
XADD
La commande ajoute un message au flux.XREAD
La commande lit les messages 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
La commande ajoute un message au flux.XREAD
La commande lit les messages de Stream.XREADGROUP
La commande implémente la fonction de groupe de consommateurs.Ce qui suit est un exemple simple de script Lua pour implémenter les opérations de base des producteurs et des consommateurs.
-- 生产者脚本
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)
Les groupes de consommateurs sont une fonctionnalité de Redis Stream qui permet à plusieurs instances de consommateurs de coordonner leur travail et de consommer conjointement les messages dans le Stream.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
L'utilisation de scripts Lua et Redis Stream pour implémenter des files d'attente de messages peut exploiter pleinement les hautes performances de Redis et l'atomicité des scripts Lua pour créer un système de file d'attente de messages efficace et fiable. La fonctionnalité de groupes de consommateurs améliore encore la disponibilité et l'évolutivité des files d'attente de messages.
Redis propose plusieurs façons d'implémenter des files d'attente de messages, chacune ayant ses scénarios applicables. List convient aux exigences de file d'attente simples, Pub/Sub convient au mode publication/abonnement et Stream fournit des fonctions de file d'attente de messages plus puissantes, notamment la persistance, les groupes de consommateurs et d'autres fonctionnalités.