Κοινή χρήση τεχνολογίας

Υλοποίηση ουρών μηνυμάτων χρησιμοποιώντας το Redis: Practice of List, Pub/Sub και Stream

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Περίληψη

Το Redis είναι ένα σύστημα αποθήκευσης κλειδιών-τιμών υψηλής απόδοσης και οι πολλαπλές δομές δεδομένων του το καθιστούν ιδανική επιλογή για την υλοποίηση ουρών μηνυμάτων. Αυτό το άρθρο θα διερευνήσει πώς να χρησιμοποιήσετε τις δομές δεδομένων List, Pub/Sub και Stream του Redis για την εφαρμογή ενός αποτελεσματικού συστήματος ουράς μηνυμάτων.

1. Βασικές έννοιες της ουράς μηνυμάτων

Η ουρά μηνυμάτων είναι ένας μηχανισμός επικοινωνίας μεταξύ εφαρμογών που επιτρέπει στις εφαρμογές να στέλνουν και να λαμβάνουν μηνύματα ασύγχρονα. Χρησιμοποιείται σε κατανεμημένα συστήματα για την αποσύνδεση εξαρτημάτων σέρβις και τη βελτίωση της επεκτασιμότητας και της αξιοπιστίας του συστήματος.

2. Πλεονεκτήματα του Redis ως ουρά μηνυμάτων

  • υψηλή απόδοση: Το Redis είναι μια λειτουργία που βασίζεται στη μνήμη με εξαιρετικά γρήγορες ταχύτητες ανάγνωσης και εγγραφής.
  • Διάφορες δομές δεδομένων: Υποστηρίζει διάφορες δομές δεδομένων όπως List, Set, Pub/Sub κ.λπ., κατάλληλες για διαφορετικά σενάρια χρήσης.
  • επιμονή: Υποστηρίξτε τη διατήρηση των δεδομένων και βεβαιωθείτε ότι τα μηνύματα δεν θα χαθούν.
  • Ατομικές λειτουργίες: Υποστήριξη συναλλαγών και ατομικών λειτουργιών για τη διασφάλιση της συνέπειας των λειτουργιών ουράς μηνυμάτων.

3. Χρησιμοποιήστε τη λίστα για την υλοποίηση της ουράς μηνυμάτων

Η λίστα είναι μία από τις βασικές δομές δεδομένων στο Redis και μπορεί να χρησιμοποιηθεί ως απλή ουρά μηνυμάτων.

3.1 Βασικές λειτουργίες

  • παραγωγός:χρήσηLPUSHΗ εντολή εισάγει το μήνυμα στην κεφαλή της λίστας.
  • καταναλωτής:χρήσηBRPOPΗ εντολή μπλοκάρει το μήνυμα από το τέλος της λίστας.

3.2 Παράδειγμα εφαρμογής

// 生产者
jedis.lpush("queue", "message");

// 消费者
String message = jedis.brpop(0, "queue");
  • 1
  • 2
  • 3
  • 4
  • 5

4. Χρησιμοποιήστε το Pub/Sub για να εφαρμόσετε το μοντέλο δημοσίευσης/εγγραφής

Το Pub/Sub είναι ένα μοντέλο δημοσίευσης και συνδρομής μηνυμάτων που μπορεί να επιτύχει παράδοση μηνυμάτων ένα προς πολλά.

4.1 Βασικές λειτουργίες

  • αναγγέλων:χρήσηPUBLISHΗ εντολή δημοσιεύει μηνύματα στο καθορισμένο κανάλι.
  • συνδρομητής:χρήσηSUBSCRIBEΕντολή για εγγραφή στο κανάλι και λήψη μηνυμάτων.

4.2 Παράδειγμα εφαρμογής

// 发布者
jedis.publish("channel", "message");

// 订阅者
jedis.subscribe(new JedisPubSub() {
    @Override
    public void onMessage(String channel, String message) {
        System.out.println("Received: " + message);
    }
}, "channel");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5. Χρησιμοποιήστε τη ροή για να εφαρμόσετε την ουρά μηνυμάτων

Το Stream είναι μια νέα μόνιμη δομή δεδομένων που εισήχθη στο Redis 5.0, ειδικά σχεδιασμένη για λειτουργίες ουράς μηνυμάτων και καταγραφής.

5.1 Βασικές λειτουργίες

  • παραγωγός:χρήσηXADDΗ εντολή προσθέτει ένα μήνυμα στη ροή.
  • καταναλωτής:χρήσηXREADΗ εντολή διαβάζει μηνύματα από τη ροή.

5.2 Παράδειγμα εφαρμογής

// 生产者
String messageId = jedis.xadd("stream", StreamEntry.entry("field1", "value1"));

// 消费者
List<Map.Entry<String, String>> messages = jedis.xread(StreamsXReadParams.STREAMS.entry("stream", messageId));
  • 1
  • 2
  • 3
  • 4
  • 5

5.3 Χρησιμοποιήστε το σενάριο Lua και το Redis Stream για να εφαρμόσετε αποτελεσματική ουρά μηνυμάτων

1. Πλεονεκτήματα των σεναρίων Lua στο Redis
  • ατομικότητα: Τα σενάρια Lua εκτελούνται μέσα στο Redis, διασφαλίζοντας την ατομικότητα των λειτουργιών.
  • εκτέλεση: Μειώνει τον αριθμό των δρομολογίων μετ' επιστροφής στο δίκτυο και βελτιώνει την αποτελεσματικότητα της εκτέλεσης.
  • ευκαμψία: Μπορεί να γράψει πολύπλοκη λογική για να προσαρμοστεί σε διαφορετικές επιχειρηματικές ανάγκες.
2. Χρησιμοποιήστε τη δέσμη ενεργειών Lua για τη λειτουργία του Redis Stream
2.1 Βασικές λειτουργίες
  • παραγωγός:χρήσηXADDΗ εντολή προσθέτει ένα μήνυμα στη ροή.
  • καταναλωτής:χρήσηXREADΗ εντολή διαβάζει μηνύματα από τη ροή.
  • ομάδα καταναλωτών:χρήσηXREADGROUPΗ εντολή υλοποιεί τη λειτουργία της ομάδας καταναλωτών.
2.2 Παράδειγμα σεναρίου Lua

Το παρακάτω είναι ένα απλό παράδειγμα σεναρίου 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

3. Χρήση ομάδων καταναλωτών

Οι ομάδες καταναλωτών είναι ένα χαρακτηριστικό του Redis Stream που επιτρέπει σε πολλές περιπτώσεις καταναλωτών να συντονίζουν την εργασία τους και να καταναλώνουν από κοινού μηνύματα στη ροή.

3.1 Δημιουργία ομάδας καταναλωτών
redis.call('XGROUP', 'CREATE', streamKey, groupName, '$', 'MKSTREAM')
  • 1
3.2 Ανάγνωση ομάδων καταναλωτών
redis.call('XREADGROUP', 'GROUP', groupName, consumerName, 'BLOCK', 5000, 'STREAMS', streamKey, '>')
  • 1

4. Περίληψη

Η χρήση σεναρίων Lua και του Redis Stream για την υλοποίηση ουρών μηνυμάτων μπορεί να αξιοποιήσει πλήρως την υψηλή απόδοση του Redis και την ατομικότητα των σεναρίων Lua για τη δημιουργία ενός αποτελεσματικού και αξιόπιστου συστήματος ουράς μηνυμάτων. Το χαρακτηριστικό των ομάδων καταναλωτών ενισχύει περαιτέρω τη διαθεσιμότητα και την επεκτασιμότητα των ουρών μηνυμάτων.

5. Προφυλάξεις
  • Βεβαιωθείτε ότι τα σενάρια Lua έχουν ελεγχθεί πλήρως πριν από την εκτέλεση.
  • Λαμβάνοντας υπόψη την επιμονή και την ασφάλεια του μηνύματος, διαμορφώστε κατάλληλα τη στρατηγική επιμονής Redis.
  • Σε περιβάλλον παραγωγής, παρακολουθήστε την απόδοση και την κατάσταση των ουρών μηνυμάτων για να διασφαλίσετε τη σταθερή λειτουργία του συστήματος.
6. Αναφορές

6. Περίληψη

Το Redis παρέχει πολλούς τρόπους για την υλοποίηση ουρών μηνυμάτων, καθένας από τους οποίους έχει τα ισχύοντα σενάρια του. Η λίστα είναι κατάλληλη για απλές απαιτήσεις ουράς, η Pub/Sub είναι κατάλληλη για τη λειτουργία δημοσίευσης/εγγραφής και η ροή παρέχει πιο ισχυρές λειτουργίες ουράς μηνυμάτων, συμπεριλαμβανομένης της εμμονής, των ομάδων καταναλωτών και άλλων λειτουργιών.
Εισαγάγετε την περιγραφή της εικόνας εδώ

7. Παραπομπές