私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis は高性能のキー/値ストレージ システムであり、その複数のデータ構造はメッセージ キューの実装に最適です。この記事では、Redis のリスト、Pub/Sub、およびストリーム データ構造を使用して効率的なメッセージ キュー システムを実装する方法について説明します。
メッセージ キューは、アプリケーションがメッセージを非同期に送受信できるようにする、アプリケーション間の通信メカニズムです。これは、分散システムでサービス コンポーネントを分離し、システムのスケーラビリティと信頼性を向上させるために使用されます。
List は Redis の基本的なデータ構造の 1 つであり、単純なメッセージ キューとして使用できます。
LPUSH
このコマンドは、リストの先頭にメッセージを挿入します。BRPOP
このコマンドは、リストの末尾からのメッセージをブロックします。// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub は、1 対多のメッセージ配信を実現できるメッセージ パブリッシュおよびサブスクリプション モデルです。
PUBLISH
このコマンドは、指定されたチャネルにメッセージをパブリッシュします。SUBSCRIBE
チャンネルに登録してメッセージを受信するコマンド。// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream は、Redis 5.0 で導入された新しい永続データ構造で、メッセージ キューおよびロギング機能用に特別に設計されています。
XADD
コマンドはメッセージをストリームに追加します。XREAD
コマンドはストリームからメッセージを読み取ります。// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
コマンドはメッセージをストリームに追加します。XREAD
コマンドはストリームからメッセージを読み取ります。XREADGROUP
このコマンドはコンシューマ グループの機能を実装します。以下は、プロデューサーとコンシューマーの基本操作を実装する簡単な Lua スクリプトの例です。
-- 生产者脚本
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)
コンシューマ グループは、複数のコンシューマ インスタンスが作業を調整し、ストリーム内のメッセージを共同で消費できるようにする Redis Stream の機能です。
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Lua スクリプトと Redis Stream を使用してメッセージ キューを実装すると、Redis の高いパフォーマンスと Lua スクリプトの原子性を最大限に活用して、効率的で信頼性の高いメッセージ キュー システムを構築できます。コンシューマ グループの機能により、メッセージ キューの可用性とスケーラビリティがさらに強化されます。
Redis にはメッセージ キューを実装するための複数の方法が用意されており、それぞれに適用可能なシナリオがあります。 List は単純なキュー要件に適しており、Pub/Sub はパブリッシュ/サブスクライブ モードに適しており、Stream は永続性、コンシューマ グループ、その他の機能を含む、より強力なメッセージ キュー機能を提供します。