informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Redis adalah sistem penyimpanan nilai kunci berkinerja tinggi, dan berbagai struktur datanya menjadikannya pilihan ideal untuk mengimplementasikan antrean pesan. Artikel ini akan mempelajari cara menggunakan struktur data Daftar, Pub/Sub, dan Aliran Redis untuk mengimplementasikan sistem antrean pesan yang efisien.
Antrian pesan adalah mekanisme komunikasi antar aplikasi yang memungkinkan aplikasi mengirim dan menerima pesan secara asinkron. Ini digunakan dalam sistem terdistribusi untuk memisahkan komponen layanan dan meningkatkan skalabilitas dan keandalan sistem.
Daftar adalah salah satu struktur data dasar di Redis dan dapat digunakan sebagai antrian pesan sederhana.
LPUSH
Perintah tersebut menyisipkan pesan ke bagian atas Daftar.BRPOP
Perintah memblokir pesan dari akhir Daftar.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Pub/Sub adalah penerbitan pesan dan model berlangganan yang dapat mencapai pengiriman pesan satu-ke-banyak.
PUBLISH
Perintah tersebut menerbitkan pesan ke saluran tertentu.SUBSCRIBE
Perintah untuk berlangganan saluran dan menerima pesan.// 发布者
jedis.publish("channel", "message");
// 订阅者
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println("Received: " + message);
}
}, "channel");
Stream adalah struktur data persisten baru yang diperkenalkan di Redis 5.0, yang dirancang khusus untuk fungsi antrian pesan dan pencatatan.
XADD
Command menambahkan pesan ke Stream.XREAD
Perintah membaca pesan dari Stream.// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));
// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
XADD
Command menambahkan pesan ke Stream.XREAD
Perintah membaca pesan dari Stream.XREADGROUP
Perintah tersebut mengimplementasikan fungsi grup konsumen.Berikut ini adalah contoh skrip Lua sederhana untuk mengimplementasikan operasi dasar produsen dan konsumen.
-- 生产者脚本
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)
Grup konsumen adalah fitur Redis Stream yang memungkinkan beberapa instance konsumen mengoordinasikan pekerjaan mereka dan bersama-sama menggunakan pesan di Stream.
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
Menggunakan skrip Lua dan Redis Stream untuk mengimplementasikan antrian pesan dapat memanfaatkan sepenuhnya kinerja tinggi Redis dan atomisitas skrip Lua untuk membangun sistem antrian pesan yang efisien dan andal. Fitur kelompok konsumen semakin meningkatkan ketersediaan dan skalabilitas antrian pesan.
Redis menyediakan berbagai cara untuk mengimplementasikan antrean pesan, yang masing-masing memiliki skenario yang dapat diterapkan. Daftar cocok untuk persyaratan antrean sederhana, Pub/Sub cocok untuk mode terbitkan/berlangganan, dan Stream menyediakan fungsi antrean pesan yang lebih kuat, termasuk persistensi, grup konsumen, dan fitur lainnya.