τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Το Redis είναι ένα σύστημα αποθήκευσης κλειδιών-τιμών υψηλής απόδοσης και οι πολλαπλές δομές δεδομένων του το καθιστούν ιδανική επιλογή για την υλοποίηση ουρών μηνυμάτων. Αυτό το άρθρο θα διερευνήσει πώς να χρησιμοποιήσετε τις δομές δεδομένων List, Pub/Sub και Stream του Redis για την εφαρμογή ενός αποτελεσματικού συστήματος ουράς μηνυμάτων.
Η ουρά μηνυμάτων είναι ένας μηχανισμός επικοινωνίας μεταξύ εφαρμογών που επιτρέπει στις εφαρμογές να στέλνουν και να λαμβάνουν μηνύματα ασύγχρονα. Χρησιμοποιείται σε κατανεμημένα συστήματα για την αποσύνδεση εξαρτημάτων σέρβις και τη βελτίωση της επεκτασιμότητας και της αξιοπιστίας του συστήματος.
Η λίστα είναι μία από τις βασικές δομές δεδομένων στο Redis και μπορεί να χρησιμοποιηθεί ως απλή ουρά μηνυμάτων.
LPUSH
Η εντολή εισάγει το μήνυμα στην κεφαλή της λίστας.BRPOP
Η εντολή μπλοκάρει το μήνυμα από το τέλος της λίστας.// 生产者
jedis.lpush("queue", "message");
// 消费者
String message = jedis.brpop(0, "queue");
Το Pub/Sub είναι ένα μοντέλο δημοσίευσης και συνδρομής μηνυμάτων που μπορεί να επιτύχει παράδοση μηνυμάτων ένα προς πολλά.
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 παρέχει πολλούς τρόπους για την υλοποίηση ουρών μηνυμάτων, καθένας από τους οποίους έχει τα ισχύοντα σενάρια του. Η λίστα είναι κατάλληλη για απλές απαιτήσεις ουράς, η Pub/Sub είναι κατάλληλη για τη λειτουργία δημοσίευσης/εγγραφής και η ροή παρέχει πιο ισχυρές λειτουργίες ουράς μηνυμάτων, συμπεριλαμβανομένης της εμμονής, των ομάδων καταναλωτών και άλλων λειτουργιών.