Προγραμματισμός

Πώς να χρησιμοποιήσετε το Redis Streams

Ο Roshan Kumar είναι ανώτερος διευθυντής προϊόντων στο Redis Labs.

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

Με τη δομή δεδομένων του Redis Streams, μπορείτε να κάνετε πολύ περισσότερα από ό, τι ήταν δυνατό με το Pub / Sub, τις λίστες και τα ταξινομημένα σύνολα. Μεταξύ των πολλών πλεονεκτημάτων, το Redis Streams σας επιτρέπει να κάνετε τα εξής:

  • Συλλέξτε μεγάλους όγκους δεδομένων που φτάνουν σε υψηλή ταχύτητα (το μόνο σημείο συμφόρησης είναι το δίκτυο I / O).
  • Δημιουργήστε ένα κανάλι δεδομένων μεταξύ πολλών παραγωγών και πολλών καταναλωτών.
  • Διαχειριστείτε αποτελεσματικά την κατανάλωση δεδομένων σας ακόμη και όταν οι παραγωγοί και οι καταναλωτές δεν λειτουργούν με τον ίδιο ρυθμό.
  • Να διατηρούνται τα δεδομένα όταν οι καταναλωτές σας είναι εκτός σύνδεσης ή αποσυνδεδεμένοι.
  • Επικοινωνία μεταξύ παραγωγών και καταναλωτών ασύγχρονα.
  • Κλιμάκωση του αριθμού των καταναλωτών σας
  • Εφαρμογή ασφάλειας δεδομένων όπως συναλλαγές όταν οι καταναλωτές αποτυγχάνουν στη μέση της κατανάλωσης δεδομένων. και
  • Χρησιμοποιήστε την κύρια μνήμη σας αποτελεσματικά.

Το καλύτερο μέρος των ροών Redis είναι ότι είναι ενσωματωμένο στο Redis, επομένως δεν απαιτούνται επιπλέον βήματα για την ανάπτυξη ή τη διαχείριση των ροών Redis. Σε αυτό το άρθρο, θα σας καθοδηγήσω στα βασικά στοιχεία της χρήσης του Redis Streams. Θα δούμε πώς μπορούμε να προσθέσουμε δεδομένα σε μια ροή και πώς μπορούμε να διαβάσουμε αυτά τα δεδομένα (όλα ταυτόχρονα, ασύγχρονα, καθώς φθάνει, κ.λπ.) για να ικανοποιήσουμε διαφορετικές περιπτώσεις χρήσης των καταναλωτών.

Σε δύο μελλοντικά άρθρα εδώ, θα συζητήσω πώς λειτουργούν οι ομάδες καταναλωτών του Redis Stream και θα δείξω μια εφαρμογή που χρησιμοποιεί το Redis Streams.

Κατανοήστε τη ροή δεδομένων στις ροές Redis

Το Redis Streams παρέχει μια δομή δεδομένων "append only" που εμφανίζεται παρόμοια με τα αρχεία καταγραφής. Προσφέρει εντολές που σας επιτρέπουν να προσθέτετε πηγές σε ροές, να καταναλώνετε ροές και να παρακολουθείτε και να διαχειρίζεστε τον τρόπο κατανάλωσης δεδομένων. Η δομή δεδομένων ροών είναι ευέλικτη, επιτρέποντάς σας να συνδέσετε παραγωγούς και καταναλωτές με διάφορους τρόπους.

Εργαστήρια Redis

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

Εργαστήρια Redis

Στο Σχήμα 2, μια κοινή ροή δεδομένων καταναλώνεται από περισσότερους από έναν καταναλωτές. Με το Redis Streams, οι καταναλωτές μπορούν να διαβάσουν και να αναλύσουν τα δεδομένα με τον δικό τους ρυθμό.

Στην επόμενη εφαρμογή, που φαίνεται στο Σχήμα 3, τα πράγματα γίνονται λίγο πιο περίπλοκα. Αυτή η υπηρεσία λαμβάνει δεδομένα από πολλούς παραγωγούς και τα αποθηκεύει σε μια δομή δεδομένων Redis Streams. Η εφαρμογή έχει πολλούς καταναλωτές να διαβάζουν τα δεδομένα από το Redis Streams, καθώς και μια ομάδα καταναλωτών, η οποία υποστηρίζει καταναλωτές που δεν μπορούν να λειτουργήσουν με τον ίδιο ρυθμό με τους παραγωγούς.

Εργαστήρια Redis

Προσθέστε δεδομένα σε μια ροή με Redis Streams

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

Η προεπιλεγμένη μέθοδος για την προσθήκη δεδομένων

Αυτός είναι ο απλούστερος τρόπος προσθήκης δεδομένων σε ροές Redis:

XADD mystream * όνομα Άννα

XADD mystream * όνομα Bert

XADD mystream * όνομα Cathy

Σε αυτήν την εντολή, το XADD είναι η εντολή Redis, το mystream είναι το όνομα της ροής, τα Anna, Bert και Cathy είναι τα ονόματα που προστίθενται σε κάθε γραμμή και ο * χειριστής λέει στον Redis να δημιουργεί αυτόματα το αναγνωριστικό για κάθε γραμμή. Αυτή η εντολή οδηγεί σε τρεις καταχωρήσεις mystream:

1518951481323-0 όνομα Cathy

1518951480723-0 όνομα Bert

1518951480106-0 όνομα Άννα

Προσθήκη δεδομένων με αναγνωρισμένα από τον χρήστη αναγνωριστικά για κάθε καταχώριση

Το Redis σάς δίνει τη δυνατότητα να διατηρήσετε το δικό σας αναγνωριστικό για κάθε καταχώριση (δείτε παρακάτω). Αν και αυτό μπορεί να είναι χρήσιμο σε ορισμένες περιπτώσεις, είναι συνήθως απλούστερο να βασίζεστε σε αυτόματα δημιουργημένα αναγνωριστικά.

XADD mystream 10000000 όνομα Άννα

XADD mystream 10000001 όνομα Bert

XADD mystream 10000002 όνομα Cathy

Αυτό οδηγεί στις ακόλουθες καταχωρήσεις mystream:

10000002-0 όνομα Cathy

10000001-0 όνομα Bert

10000000-0 όνομα Άννα

Προσθήκη δεδομένων με μέγιστο όριο

Μπορείτε να περιορίσετε τη ροή σας με μέγιστο αριθμό καταχωρίσεων:

XADD mystream MAXLEN 1000000 * όνομα Άννα

XADD mystream MAXLEN 1000000 * όνομα Bert

XADD mystream MAXLEN 1000000 * όνομα Cathy

Αυτή η εντολή απομακρύνει παλαιότερες καταχωρήσεις όταν η ροή φτάνει σε μήκος περίπου 1.000.000.

Μια συμβουλή: Το Redis Streams αποθηκεύει δεδομένα στους μακροοικονομικούς κόμβους ενός δέντρου radix. Κάθε κόμβος μακροεντολών έχει μερικά στοιχεία δεδομένων (συνήθως, στο εύρος μερικών δεκάδων). Προσθέτοντας μια κατά προσέγγιση τιμή MAXLEN όπως φαίνεται παρακάτω, αποφεύγεται ο χειρισμός του κόμβου μακροεντολών για κάθε εισαγωγή. Εάν μερικές δεκάδες αριθμοί - π.χ. 1000000 ή 1000050 - δεν έχουν μεγάλη διαφορά για εσάς, μπορείτε να βελτιστοποιήσετε την απόδοσή σας καλώντας την εντολή με τον χαρακτήρα προσέγγισης (~).

XADD mystream MAXLEN ~ 1000000 * όνομα Άννα

XADD mystream MAXLEN ~ 1000000 * όνομα Bert

XADD mystream MAXLEN ~ 1000000 * όνομα Cathy

Καταναλώστε δεδομένα από μια ροή με Redis Streams

Η δομή Redis Streams προσφέρει ένα πλούσιο σύνολο εντολών και λειτουργιών για την κατανάλωση των δεδομένων σας με διάφορους τρόπους.

Διαβάστε τα πάντα από την αρχή της ροής

Κατάσταση: Η ροή έχει ήδη τα δεδομένα που χρειάζεστε για επεξεργασία και θέλετε να τα επεξεργαστείτε όλα από την αρχή.

Η εντολή που θα χρησιμοποιήσετε για αυτό είναι το XREAD, το οποίο σας επιτρέπει να διαβάσετε όλες ή τις πρώτες καταχωρίσεις N από την αρχή της ροής. Ως βέλτιστη πρακτική, είναι πάντα καλή ιδέα να διαβάσετε τη σελίδα δεδομένων ανά σελίδα. Για να διαβάσετε έως και 100 καταχωρήσεις από την αρχή της ροής, η εντολή είναι:

XREAD COUNT 100 STREAMS mystream 0

Υποθέτοντας ότι το 1518951481323-0 είναι το τελευταίο αναγνωριστικό του στοιχείου που λάβατε στην προηγούμενη εντολή, μπορείτε να ανακτήσετε τις επόμενες 100 καταχωρήσεις εκτελώντας:

XREAD COUNT 100 STREAMS mystream 1518951481323-1

Καταναλώστε δεδομένα ασύγχρονα (μέσω κλήσης αποκλεισμού)

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

Υπάρχουν πολλές περιπτώσεις χρήσης όπου ο καταναλωτής διαβάζει γρηγορότερα από ό, τι οι παραγωγοί προσθέτουν δεδομένα στη ροή σας. Σε αυτά τα σενάρια, θέλετε ο καταναλωτής να περιμένει και να ειδοποιείται όταν φτάνουν νέα δεδομένα. Η επιλογή BLOCK σάς επιτρέπει να καθορίσετε το χρονικό διάστημα αναμονής για νέα δεδομένα: 

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Εδώ, το XREAD επιστρέφει όλα τα δεδομένα μετά το 1518951123456-1. Εάν δεν υπάρχουν δεδομένα μετά από αυτό, το ερώτημα θα περιμένει N = 60 δευτερόλεπτα έως ότου φτάσουν νέα δεδομένα και έπειτα το χρονικό όριο. Εάν θέλετε να αποκλείσετε αυτήν την εντολή απεριόριστα, καλέστε το XREAD ως εξής:

XREAD BLOCK 0 STREAMS mystream 1518951123456-1 

Σημείωση: Σε αυτό το παράδειγμα, θα μπορούσατε επίσης να ανακτήσετε δεδομένα από σελίδα σε σελίδα χρησιμοποιώντας την εντολή XRANGE. 

Διαβάστε μόνο νέα δεδομένα καθώς φθάνει

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

Όταν διαβάζετε δεδομένα επανειλημμένα, είναι πάντα καλή ιδέα να κάνετε επανεκκίνηση από εκεί που σταματήσατε. Για παράδειγμα, στο προηγούμενο παράδειγμα, κάνατε μια κλήση αποκλεισμού για να διαβάσετε δεδομένα μεγαλύτερα από 1518951123456-1. Ωστόσο, για πρώτη φορά, ενδέχεται να μην γνωρίζετε το πιο πρόσφατο αναγνωριστικό. Σε τέτοιες περιπτώσεις, μπορείτε να αρχίσετε να διαβάζετε τη ροή με το σύμβολο $, το οποίο λέει στην εντολή XREAD να ανακτήσει μόνο νέα δεδομένα. Καθώς αυτή η κλήση χρησιμοποιεί την επιλογή BLOCK με 60 δευτερόλεπτα, θα περιμένει έως ότου υπάρχουν κάποια δεδομένα στη ροή.

XREAD BLOCK 60000 STREAMS mystream $

Σε αυτήν την περίπτωση, θα αρχίσετε να διαβάζετε νέα δεδομένα με την επιλογή $. Ωστόσο, δεν πρέπει να πραγματοποιείτε επόμενες κλήσεις με την επιλογή $. Για παράδειγμα, εάν το 1518951123456-0 είναι το αναγνωριστικό των δεδομένων που ανακτήθηκαν σε προηγούμενες κλήσεις, η επόμενη κλήση σας θα πρέπει να είναι:

XREAD BLOCK 60000 STREAMS mystream 1518951123456-1

Επαναλάβετε τη ροή για να διαβάσετε προηγούμενα δεδομένα

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

Θα μπορούσατε να διαβάσετε τα δεδομένα μεταξύ δύο καταχωρίσεων είτε προς τα εμπρός είτε προς τα πίσω χρησιμοποιώντας XRANGE και XREVRANGE αντίστοιχα. Σε αυτό το παράδειγμα, η εντολή διαβάζει δεδομένα μεταξύ 1518951123450-0 και 1518951123460-0:

XRANGE mystream 1518951123450-0 1518951123460-0

Το XRANGE σας επιτρέπει επίσης να περιορίσετε τον αριθμό των αντικειμένων που επιστρέφονται με τη βοήθεια της επιλογής COUNT. Για παράδειγμα, το ακόλουθο ερώτημα επιστρέφει τα πρώτα 10 στοιχεία μεταξύ των δύο διαστημάτων. Με αυτήν την επιλογή, θα μπορούσατε να επαναλάβετε μια ροή όπως κάνετε με την εντολή SCAN:

XRANGE mystream 1518951123450-0 1518951123460-0 ΑΡΙΘΜΟΣ 10

Όταν δεν γνωρίζετε το κάτω ή το ανώτερο όριο του ερωτήματός σας, μπορείτε να αντικαταστήσετε το κάτω όριο από - και το άνω όριο με +. Για παράδειγμα, το ακόλουθο ερώτημα επιστρέφει τα πρώτα 10 στοιχεία από την αρχή της ροής σας:

XRANGE mystream - + COUNT 10

Η σύνταξη για το XREVRANGE είναι παρόμοια με το XRANGE, εκτός του ότι αντιστρέφετε τη σειρά των κάτω και ανώτερων ορίων σας. Για παράδειγμα, το ακόλουθο ερώτημα επιστρέφει τα πρώτα 10 στοιχεία από το τέλος της ροής σας με αντίστροφη σειρά:

XREVRANGE mystream + - COUNT 10

Δεδομένα κατατμήσεων σε περισσότερους από έναν καταναλωτές

Κατάσταση: Οι καταναλωτές καταναλώνουν τα δεδομένα σας πολύ πιο αργά από ό, τι τα παράγουν οι παραγωγοί.

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

Με το Redis Streams, μπορείτε να χρησιμοποιήσετε ομάδες καταναλωτών για να το επιτύχετε. Όταν περισσότεροι από ένας καταναλωτές είναι μέλη μιας ομάδας, το Redis Streams θα διασφαλίσει ότι κάθε καταναλωτής θα λαμβάνει ένα αποκλειστικό σύνολο δεδομένων.

XREADGROUP GROUP mygroup καταναλωτής1 COUNT 2 STREAMS mystream>

Φυσικά, υπάρχουν πολλά περισσότερα για να μάθετε πώς λειτουργούν οι ομάδες καταναλωτών. Οι ομάδες καταναλωτών Redis Streams έχουν σχεδιαστεί για να χωρίζουν δεδομένα, να ανακτούν από καταστροφές και να παρέχουν ασφάλεια δεδομένων συναλλαγών. Θα τα εξηγήσω όλα αυτά στο επόμενο άρθρο μου εδώ.

Όπως μπορείτε να δείτε, είναι εύκολο να ξεκινήσετε με το Redis Streams. Απλώς κατεβάστε και εγκαταστήστε το Redis 5.0 και μπείτε στον οδηγό Redis Streams στον ιστότοπο του έργου.

Ο Roshan Kumar είναι ανώτερος διευθυντής προϊόντων στοΕργαστήρια Redis. Έχει εκτεταμένη εμπειρία στην ανάπτυξη λογισμικού και στο μάρκετινγκ τεχνολογίας. Η Roshan έχει εργαστεί στο Hewlett-Packard και σε πολλές επιτυχημένες νεοσύστατες εταιρείες της Silicon Valley, συμπεριλαμβανομένων των ZillionTV, Salorix, Alopa και ActiveVideo. Ως ενθουσιώδης προγραμματιστής, σχεδίασε και ανέπτυξε το mindzeal.com, μια διαδικτυακή πλατφόρμα που φιλοξενεί μαθήματα προγραμματισμού υπολογιστών για νέους μαθητές. Ο Roshan είναι κάτοχος πτυχίου στην επιστήμη των υπολογιστών και MBA από το Πανεπιστήμιο Santa Clara.

Το New Tech Forum παρέχει έναν χώρο για να εξερευνήσετε και να συζητήσετε την αναδυόμενη τεχνολογία σε πρωτοφανές βάθος και εύρος. Η επιλογή είναι υποκειμενική, με βάση την επιλογή των τεχνολογιών που πιστεύουμε ότι είναι σημαντικές και έχουν μεγάλο ενδιαφέρον για τους αναγνώστες. δεν αποδέχεται ασφάλεια μάρκετινγκ για δημοσίευση και διατηρεί το δικαίωμα να επεξεργαστεί όλο το περιεχόμενο. Στείλτε όλες τις ερωτήσεις στο[email protected].