Όταν εκτελούμε ορισμένες χρονομετρημένες λειτουργίες, χρειαζόμαστε ανατροφοδότηση για τα αποτελέσματα. Για παράδειγμα, οι παραγγελίες διαγράφονται αυτόματα μετά τη λήξη τους, οι παραγγελίες επαινούνται αυτόματα μετά από μερικές ημέρες, οι απλήρωτες παραγγελίες κλείνουν μετά από 15 λεπτά κ.λπ., οι οποίες μπορούν να ολοκληρωθούν χρησιμοποιώντας ορισμένα χρονομετρημένα πλαίσια εργασιών ή μεθόδους ψηφοφορίας. Αυτό το άρθρο χρησιμοποιεί τον μηχανισμό ειδοποίησης συμβάντων λήξης cache προηγμένων δυνατοτήτων Redis σε συνδυασμό με κώδικα .NET/C# για την ολοκλήρωση των επιχειρηματικών απαιτήσεων.
Εισαγωγή
Σενάρια χρήσης: 1. Στις επιχειρήσεις πληρωμών, οι απλήρωτες παραγγελίες κλείνουν αυτόματα 2. Υπενθυμίσεις λήξης προσωρινής μνήμης
Γενικά, μπορούμε να χρησιμοποιήσουμε την υπηρεσία χρονισμού για να επεξεργαστούμε το αυτόματο κλείσιμο απλήρωτων παραγγελιών, όπως να καλούμε τη διεπαφή κάθε λεπτό για την επεξεργασία απλήρωτων και ληγμένων παραγγελιών, αλλά σε αυτήν την περίπτωση, θα καταναλώσει την απόδοση του υπολογιστή, ακόμα κι αν δεν υπάρχει παραγγελία, θα υποβάλλεται σε επεξεργασία κάθε λεπτό και η μέγιστη καθυστέρηση του χρόνου επεξεργασίας της παραγγελίας θα είναι 59 δευτερόλεπτα και η υπηρεσία χρονισμού πρέπει να είναι πάντα διαθέσιμη
Τι θέλουμε λοιπόν να κάνουμε μόνο όταν υπάρχουν απλήρωτες και ληγμένες παραγγελίες με επεξεργασία χαμηλής καθυστέρησης, μπορούμε να χρησιμοποιήσουμε τον μηχανισμό λήξης της προσωρινής μνήμης της Redis για να προωθήσουμε τη συνδρομή.
Συνδρομή Redis
Τροποποιήστε το notify-keyspace-events Ex στο αρχείο διαμόρφωσης redis.conf
Για να εξοικονομήσετε πόρους κυπέλλου, οι ειδοποιήσεις συμβάντων δεν είναι ενεργοποιημένες από προεπιλογή και η προεπιλογή είναι notify-keyspace-events
# Ειδοποίηση χώρου κλειδιού K, <db>με πρόθεμα __keyspace@__ # Ειδοποίηση συμβάντος κλειδιού E, <db>με πρόθεμα __keysevent@__ # g del, expipre, rename και άλλους τύπους γενικών εντολών, ... # $string εντολή # l Εντολή λίστας #s εντολή "Ορισμός" # h Εντολή κατακερματισμού # z εντολή διατεταγμένου συνόλου # x Συμβάν λήξης (δημιουργείται κάθε φορά που λήγει ένα κλειδί) # e συμβάν έξωσης (δημιουργείται όταν το κλειδί διαγράφεται όταν η μνήμη είναι πλήρης) # Ένα ψευδώνυμο g$lshzxe, οπότε "AKE" σημαίνει όλα τα γεγονότα
notify-keyspace-events Το "kx" υποδεικνύει ότι θέλετε να παρακολουθείτε για συμβάντα ακύρωσης για ένα κλειδί. Η ρύθμιση της παραμέτρου στη συμβολοσειρά AKE σημαίνει αποστολή όλων των τύπων ειδοποιήσεων.
Εγκατέστησα το redis ως υπηρεσία στον υπολογιστή μου, τροποποίησα το αρχείο διαμόρφωσης redis.windows.conf και χρειάστηκε να επανεκκινήσω τη διαμόρφωση της υπηρεσίας redis για να τεθεί σε ισχύ.
Παράδειγμα κώδικα .NET/C#
Το πακέτο έχει ως εξής:
επικαλούμαι
Ας δοκιμάσουμε να γράψουμε μια κρυφή μνήμη με το redis-cli.
Στην πραγματικότητα, μπορείτε επίσης να εγγραφείτε στις ειδοποιήσεις λήξης της προσωρινής μνήμης εκτελώντας την ακόλουθη εντολή μέσω του redis-cli:
Όταν N πελάτες εγγραφούν σε ειδοποιήσεις συμβάντων λήξης cache, το redis θα ειδοποιήσει N χρήστες για το ίδιο μήνυμα λήξης, όχι μόνο έναν από τους πελάτες, όπως φαίνεται στην παρακάτω εικόνα:
Λήψη πηγαίου κώδικα C#:
https://down.itsvse.com/item/17856.html
περίληψη
Το Redis pub/sub είναι ένας αναξιόπιστος μηχανισμός μηνυμάτων, δεν αποθηκεύει πληροφορίες, θα προωθεί μόνο στο διαδίκτυο και σίγουρα δεν υπάρχει μηχανισμός επιβεβαίωσης ack και θα προωθηθεί μόνο το τμήμα συνδρομής, επομένως το Keyspace Notifications είναι επίσης ένα αναξιόπιστο σύστημα ειδοποιήσεων, εάν η επιχείρησή μας χρειάζεται καλή αξιοπιστία, τότε αυτή δεν είναι η καλύτερη επιλογή. Γενικά, προτείνουμε το DLX (Dead-Letter-Exchange) του RabbitMQ για την υλοποίησή του, που είναι η λειτουργία καθυστερημένης ουράς. Απλώς η λύση της Redis είναι πιο εύκολη στην εφαρμογή και λιγότερο δαπανηρή στη λειτουργία. Εξακολουθεί να είναι πολύ βολικό για επιχειρήσεις που δεν απαιτούν υψηλή αξιοπιστία. |