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

Πώς να χρησιμοποιήσετε το Redis για εφαρμογές μέτρησης σε πραγματικό χρόνο

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

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

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

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

Κοινές εφαρμογές μέτρησης

Απαιτείται μέτρηση σε οποιαδήποτε εφαρμογή που πρέπει να μετρά τη χρήση ενός πόρου με την πάροδο του χρόνου. Ακολουθούν τέσσερα κοινά σενάρια:

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

    Η εφαρμογή τέτοιων μοντέλων μπορεί να είναι δύσκολη. Μερικές φορές το σύστημα μέτρησης πρέπει να παρακολουθεί πολλά στοιχεία χρήσης και πολλές μετρήσεις σε ένα μόνο σχέδιο. Για παράδειγμα, ένας πάροχος cloud μπορεί να ορίσει διαφορετικά επίπεδα τιμολόγησης για κύκλους CPU, αποθήκευση, απόδοση, αριθμό κόμβων ή χρονικό διάστημα που χρησιμοποιείται μια υπηρεσία. Μια εταιρεία τηλεπικοινωνιών μπορεί να ορίσει διαφορετικά επίπεδα επιτρεπόμενης κατανάλωσης για λεπτά, δεδομένα ή κείμενο. Η λύση μέτρησης πρέπει να επιβάλλει περιορισμούς, χρέωση ή επέκταση υπηρεσιών ανάλογα με τον τύπο τιμολόγησης βάσει κατανάλωσης.

  2. Περιορισμός της χρήσης πόρων. Κάθε υπηρεσία στο Διαδίκτυο μπορεί να γίνει κατάχρηση μέσω υπερβολικής χρήσης, εκτός εάν η υπηρεσία είναι περιορισμένη. Δημοφιλείς υπηρεσίες όπως το API του Google AdWords και το API ροής Twitter ενσωματώνουν όρια τιμών για αυτόν τον λόγο. Ορισμένες ακραίες περιπτώσεις κατάχρησης οδηγούν σε άρνηση υπηρεσίας (DoS). Για την αποφυγή κατάχρησης, οι υπηρεσίες και οι λύσεις που είναι προσβάσιμες στο Διαδίκτυο πρέπει να σχεδιαστούν με κατάλληλους κανόνες περιορισμού των τιμών. Ακόμη και οι απλές σελίδες ελέγχου ταυτότητας και σύνδεσης πρέπει να περιορίσουν τον αριθμό των επαναλήψεων για ένα δεδομένο χρονικό διάστημα.

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

    Εκτός από την πρόληψη της κατάχρησης και τη μείωση του φορτίου, ο καλός περιορισμός των τιμών βοηθά επίσης στη διαχείριση σεναρίων κυκλοφοριακής κίνησης. Για παράδειγμα, ένα API που επιβάλλει μια μέθοδο περιορισμού ταχύτητας ωμής δύναμης μπορεί να επιτρέπει 1000 κλήσεις κάθε ώρα. Χωρίς μια πολιτική διαμόρφωσης κίνησης, ένας πελάτης μπορεί να καλέσει το API 1000 φορές τα πρώτα δευτερόλεπτα κάθε ώρας, υπερβαίνοντας ίσως αυτό που μπορεί να υποστηρίξει η υποδομή. Οι δημοφιλείς αλγόριθμοι περιορισμού τιμών, όπως το Token Bucket και το Leaky Bucket αποτρέπουν τις εκρήξεις όχι μόνο περιορίζοντας τις κλήσεις, αλλά και τις διανέμοντας με την πάροδο του χρόνου.

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

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

  4. Μετρήσεις σε κλίμακα για λήψη αποφάσεων σε πραγματικό χρόνο. Οι ιστότοποι ηλεκτρονικού εμπορίου, οι εφαρμογές παιχνιδιών, τα μέσα κοινωνικής δικτύωσης και οι εφαρμογές για κινητά προσελκύουν εκατομμύρια καθημερινούς χρήστες. Επειδή περισσότεροι οφθαλμοί αποφέρουν μεγαλύτερα έσοδα, η μέτρηση των επισκεπτών και των ενεργειών τους είναι καθοριστικής σημασίας για τις επιχειρήσεις. Η καταμέτρηση είναι εξίσου χρήσιμη για περιπτώσεις χρήσης, όπως επαναλήψεις σφαλμάτων, κλιμάκωση ζητημάτων, πρόληψη επιθέσεων DDoS, προφίλ κυκλοφορίας, κατανομή πόρων κατ 'απαίτηση και μετριασμός απάτης.

Μετρήσεις προκλήσεων σχεδιασμού

Οι αρχιτέκτονες λύσης πρέπει να λάβουν υπόψη πολλές παραμέτρους κατά τη δημιουργία μιας εφαρμογής μέτρησης, ξεκινώντας από αυτές τις τέσσερις:

  1. Πολυπλοκότητα σχεδιασμού. Η μέτρηση, παρακολούθηση και ρύθμιση όγκων δεδομένων - ειδικά όταν φτάνουν σε υψηλή ταχύτητα - είναι αποθαρρυντικό έργο. Οι αρχιτέκτονες λύσεων μπορούν να χειριστούν τη μέτρηση στο επίπεδο εφαρμογής χρησιμοποιώντας δομές γλώσσας προγραμματισμού. Ωστόσο, ένας τέτοιος σχεδιασμός δεν αντέχει σε αστοχίες ή απώλεια δεδομένων. Οι παραδοσιακές βάσεις δεδομένων που βασίζονται σε δίσκο είναι ισχυρές και υπόσχονται υψηλό βαθμό αντοχής δεδομένων κατά τη διάρκεια αστοχιών. Όμως, όχι μόνο δεν παρέχουν την απαιτούμενη απόδοση, αλλά αυξάνουν την πολυπλοκότητα χωρίς τις σωστές δομές δεδομένων και εργαλεία για την εφαρμογή της μέτρησης.
  2. Αφάνεια. Η μέτρηση συνήθως περιλαμβάνει πολλές, συνεχείς ενημερώσεις για μετρήσεις. Η καθυστέρηση ανάγνωσης / εγγραφής δικτύου και δίσκου αυξάνεται ενώ ασχολείται με μεγάλους αριθμούς. Αυτό θα μπορούσε να δημιουργήσει μια τεράστια καθυστέρηση δεδομένων που οδηγεί σε περισσότερες καθυστερήσεις. Η άλλη πηγή λανθάνουσας κατάστασης είναι ένας σχεδιασμός προγράμματος που φορτώνει τα δεδομένα μέτρησης από μια βάση δεδομένων στην κύρια μνήμη του προγράμματος και γράφει πίσω στη βάση δεδομένων όταν ολοκληρωθεί η ενημέρωση του μετρητή.
  3. Ταυτότητα και συνέπεια. Η δημιουργία μιας λύσης για τη μέτρηση εκατομμυρίων και δισεκατομμυρίων αντικειμένων μπορεί να γίνει περίπλοκη όταν καταγράφονται γεγονότα σε διαφορετικές περιοχές και όλα πρέπει να συγκλίνουν σε ένα μέρος. Η συνέπεια των δεδομένων γίνεται ένα ζήτημα εάν πολλές διαδικασίες ή νήματα ενημερώνουν τον ίδιο αριθμό ταυτόχρονα. Οι τεχνικές κλειδώματος αποφεύγουν προβλήματα συνέπειας και παρέχουν συνοχή επιπέδου συναλλαγών, αλλά επιβραδύνουν τη λύση.
  4. Αντοχή. Η μέτρηση επηρεάζει τους αριθμούς εσόδων, πράγμα που σημαίνει ότι οι εφήμερες βάσεις δεδομένων δεν είναι ιδανικές όσον αφορά την ανθεκτικότητα. Η αποθήκευση δεδομένων στη μνήμη με επιλογές ανθεκτικότητας είναι η τέλεια επιλογή.

Χρήση του Redis για εφαρμογές μέτρησης

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

Οι εντολές Atomic Redis για καταμέτρηση

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

ΕντολήΠεριγραφή
INCR κλειδίΑυξήστε την ακέραια τιμή ενός κλειδιού κατά ένα
INCRBY αύξηση του κλειδιούΑυξήστε την ακέραια τιμή ενός κλειδιού από τον δεδομένο αριθμό
INCRBYFLOAT αύξηση του κλειδιούΑυξήστε την τιμή float ενός κλειδιού από το δεδομένο ποσό
DECR κλειδίΜειώστε την ακέραια τιμή ενός κλειδιού κατά ένα
ΔΕΚΡΗ μείωση του κλειδιούΜειώστε την ακέραια τιμή ενός κλειδιού από τον δεδομένο αριθμό
ΑΓΓΕΛΙΑ αύξηση του βασικού πεδίουΑυξήστε την ακέραια τιμή ενός πεδίου κατακερματισμού με τον δεδομένο αριθμό
HINCRBYFLOAT αύξηση του βασικού πεδίουΑυξήστε την τιμή float ενός πεδίου κατακερματισμού κατά το δεδομένο ποσό

Το Redis αποθηκεύει τους ακέραιους αριθμούς ως βασικός-10 64-bit υπογεγραμμένος ακέραιος. Επομένως, το μέγιστο όριο για έναν ακέραιο είναι ένας πολύ μεγάλος αριθμός: 263 - 1 = 9.223.372.036.854.775.807.

Ενσωματωμένο χρόνο για ζωντανή μετάδοση (TTL) στα πλήκτρα Redis

Μία από τις συνήθεις περιπτώσεις χρήσης στη μέτρηση είναι να παρακολουθείτε τη χρήση έναντι του χρόνου και να περιορίζετε τους πόρους μετά τη λήξη του χρόνου. Στο Redis, μπορεί κανείς να ορίσει μια τιμή χρόνου-προς-ζωντανή για τα κλειδιά. Το Redis θα απενεργοποιήσει αυτόματα τα πλήκτρα μετά από ένα καθορισμένο χρονικό όριο. Ο παρακάτω πίνακας παραθέτει πολλές μεθόδους λήξης κλειδιών.

ΕντολήΠεριγραφή
ΕΚΠΝΕΩ βασικά δευτερόλεπταΟρίστε την ώρα του κλειδιού για να ζείτε σε δευτερόλεπτα
ΕΞΑΙΡΕΤΙΚΟ βασική χρονική σήμανσηΟρίστε τη λήξη ενός κλειδιού ως χρονική σήμανση Unix
PEXPIRE βασικά χιλιοστά του δευτερολέπτουΟρίστε την ώρα του κλειδιού για να ζήσετε σε χιλιοστά του δευτερολέπτου
ΕΙΔΙΚΟΣ βασική χρονική σήμανσηΟρίστε τη λήξη για ένα κλειδί ως χρονική σήμανση UNIX σε χιλιοστά του δευτερολέπτου
ΣΕΙΡΑ τιμή κλειδιού [EX δευτερόλεπτα] [PX χιλιοστά του δευτερολέπτου]Ορίστε την τιμή συμβολοσειράς σε ένα κλειδί μαζί με τον προαιρετικό χρόνο για ζωντανή

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

ΕντολήΠεριγραφή
TTL κλειδίΠάρτε το χρόνο να ζήσετε για ένα κλειδί
PTTL κλειδίΠάρτε το χρόνο να ζήσετε για ένα κλειδί σε χιλιοστά του δευτερολέπτου

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

Το Redis λατρεύεται για τις δομές δεδομένων του όπως λίστες, σύνολα, ταξινομημένα σύνολα, κατακερματισμούς και υπερλογικά ιστολόγια. Πολλά περισσότερα μπορούν να προστεθούν μέσω του Redis modules API.

Εργαστήρια Redis

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

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

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

Δομή δεδομένωνΕντολήΠεριγραφή
ΛίσταLLEN κλειδίΛάβετε το μήκος μιας λίστας
ΣειράΚΑΡΤΑ κλειδίΛάβετε τον αριθμό των μελών σε ένα σετ (καρδινιλότητα)
Ταξινομημένο σετZCARD κλειδίΛάβετε τον αριθμό των μελών σε ένα ταξινομημένο σύνολο
Ταξινομημένο σετZLEXCOUNT μέγιστο ελάχιστο κλειδίΜετρήστε τον αριθμό των μελών σε ένα ταξινομημένο σύνολο μεταξύ ενός δεδομένου λεξικογραφικού εύρους
ΧασίσιHLEN κλειδίΛάβετε τον αριθμό των πεδίων σε κατακερματισμό
Υπερλογικό ιστολόγιοPFCOUNT κλειδίΑποκτήστε την κατά προσέγγιση καρδινιλότητα του συνόλου που παρατηρείται από τη δομή δεδομένων του υπερ-καταλόγου
BitmapΜΠΙΤΟΝ κλειδί [αρχή έναρξης]Καταμέτρηση ορίζει bit σε μια συμβολοσειρά

Redis επιμονή και αναπαραγωγή στη μνήμη

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

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

Ενσωματωμένη αρχιτεκτονική Redis χωρίς κλειδαριές

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

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

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

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

Αποκλεισμός πολλαπλών προσπαθειών σύνδεσης

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

Το κλειδί για τον αριθμό των προσπαθειών σύνδεσης:

user_login_attempts:

Βήματα:

Λάβετε τον τρέχοντα αριθμό προσπαθειών:

Λήψη χρήστη_login_attempts:

Εάν είναι μηδέν, ορίστε το κλειδί με τον χρόνο λήξης σε δευτερόλεπτα (1 ώρα = 3600 δευτερόλεπτα):

SET χρήστη_login_attempts: 1 3600

Εάν δεν είναι μηδενική και εάν η μέτρηση είναι μεγαλύτερη από 3, ρίξτε ένα σφάλμα:

Εάν δεν είναι μηδενική και αν ο αριθμός είναι μικρότερος ή ίσος με 3, αυξήστε τον αριθμό:

INCR user_login_attempts:

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

DEL user_login_attempts:

Πληρώστε καθώς πηγαίνετε

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

χρέωση_ πελάτη:

χρήση

κόστος

     .

     .

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

hincrby πελάτης: χρήση 20

πελάτης hincrbyfloat: κόστος .40

Όπως ίσως έχετε παρατηρήσει, η εφαρμογή σας μπορεί να ενημερώσει τις πληροφορίες στη βάση δεδομένων χωρίς να απαιτείται να φορτώσει τα δεδομένα από τη βάση δεδομένων στη μνήμη της. Επιπλέον, μπορείτε να τροποποιήσετε ένα μεμονωμένο πεδίο ενός αντικειμένου Hash χωρίς να διαβάσετε ολόκληρο το αντικείμενο.

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