Redis GETEX

Redis Getex



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

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







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



TTL ενός κλειδιού Redis

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



Η εντολή GETEX

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





Κλειδί GETEX [ EX timeout_in_seconds | PX timeout_in_milliseconds | EXAT timeout_in_unix-time-seconds | PXAT timeout_in_unix-time-milliseconds | ΕΠΙΜΕΝΩ ]

κλειδί: Αυτό είναι το κλειδί που δείχνει σε μια τιμή συμβολοσειράς.

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



ΠΡΩΗΝ: Αυτό θα ορίσει τον χρόνο λήξης σε δευτερόλεπτα για ένα δεδομένο κλειδί.

PX: Η τιμή χρονικού ορίου του κλειδιού θα οριστεί σε χιλιοστά του δευτερολέπτου.

Επιπλέον, μπορούμε να καθορίσουμε μια τιμή χρονοσήμανσης UNIX σε δευτερόλεπτα ή χιλιοστά του δευτερολέπτου χρησιμοποιώντας τις ακόλουθες επιλογές εντολών EXAT και PXAT :

EXAT: Ο χρόνος λήξης θα οριστεί στη μορφή χρονικής σφραγίδας UNIX και η χρονική σήμανση θα είναι σε δευτερόλεπτα.

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

ΕΠΙΜΕΝΩ: Καθορίζοντας αυτό, μπορείτε να αφαιρέσετε την τιμή χρόνου έως τη ζωντανή σύνδεση που σχετίζεται με ένα καθορισμένο κλειδί.

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

Στην επόμενη ενότητα, θα καλύψουμε την πρακτική χρήση της εντολής GETEX.

Περίπτωση χρήσης — Σύνδεσμος προσωρινής επαναφοράς ή δημιουργία κωδικού PIN για ανάκτηση κωδικού πρόσβασης/OTP

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

Ας υποθέσουμε ότι ένας χρήστης με user_id 1000 ζητά ανάκτηση κωδικού πρόσβασης. Έτσι, η διεύθυνση URL ανάκτησης μπορεί να αποθηκευτεί στο κλειδί RecoveryURL:UserID:1000 . Μπορούμε να χρησιμοποιήσουμε την εντολή SET για να αποθηκεύσουμε τη διεύθυνση URL ανάκτησης ως εξής:

σειρά RecoveryURL:UserID: 1000 'https://abc.com/recovery/userid=1000,key=sdfiuoe3290e9rjs'

Ας ελέγξουμε αν η διεύθυνση URL συμβολοσειράς έχει αποθηκευτεί σωστά στο κλειδί RecoveryURL:UserID:1000. Μπορούμε να χρησιμοποιήσουμε την εντολή GETEX ως εξής:

getex RecoveryURL:UserID: 1000

Η έξοδος της προηγούμενης εντολής εμφανίζεται ως εξής:

Αν έχουμε χρησιμοποιήσει την εντολή GET αντί για την εντολή GETEX, η έξοδος θα είναι η ίδια.

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

Ttl RecoveryURL:UserID: 1000

Όπως ήταν αναμενόμενο, το -1 έχει επιστραφεί από την εντολή TTL, που σημαίνει ότι δεν συσχετίζεται χρόνος λήξης με το καθορισμένο κλειδί.

Σύμφωνα με αυτό το παράδειγμα, η εταιρεία φιλοξενίας πρέπει να ορίσει ένα χρονικό όριο 5 λεπτών για τη διεύθυνση URL ανάκτησης. Έτσι, θα χρησιμοποιήσουμε το ΠΡΩΗΝ επιλογή εντολής. Επειδή τα 5 λεπτά είναι 300 δευτερόλεπτα, μπορούμε να κατασκευάσουμε την εντολή GETEX ως εξής:

getex RecoveryURL:UserID: 1000 ΠΡΩΗΝ 500

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

Όπως ήταν αναμενόμενο, ο χρόνος μειώνεται, και τελικά, ο RecoveryURL:UserID:1000 κλειδί θα αφαιρεθεί. Η ακόλουθη είναι η έξοδος μετά από 5 λεπτά:

Το -2 έχει επιστραφεί με την εντολή, που σημαίνει ότι το κλειδί έχει λήξει και διαγραφεί από το χώρο αποθήκευσης δεδομένων.

Μερικές φορές, μπορεί να χρειαστεί να αφαιρέσετε την τιμή χρονικού ορίου που σχετίζεται με ένα δεδομένο κλειδί. Έτσι, η επιλογή εντολής PERSIST μπορεί να χρησιμοποιηθεί για τη διαγραφή μιας τιμής TTL που σχετίζεται με ένα καθορισμένο κλειδί.

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

σειρά KeytoTestPersist 'Αυτό θα λήξει εντός 60 δευτερολέπτων' PX 50000

Στη συνέχεια, θα ελέγξουμε τον υπολειπόμενο χρόνο ως εξής:

Όπως ήταν αναμενόμενο, το TTL μειώνεται. Ας καλέσουμε την εντολή GETEX με την επιλογή PERSIST ως εξής:

getex KeytoTestPersist επιμένουν

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

Η εντολή TTL επέστρεψε το -1, που σημαίνει ότι κανένα TTL δεν συσχετίζεται με το κλειδί KeytoTestPersist.

Ομοίως, το GETEX Η εντολή μπορεί να χρησιμοποιηθεί για να ορίσετε το χρόνο λήξης για τα κλειδιά στη χρονική σήμανση UNIX.

συμπέρασμα

Συνοπτικά, η εντολή Redis GETEX μπορεί να χρησιμοποιηθεί για την ανάκτηση των τιμών συμβολοσειράς που είναι αποθηκευμένες σε ένα δεδομένο κλειδί όπως κάνει η εντολή GET. Η μόνη διαφορά με την εντολή GETEX είναι ότι υποστηρίζει τη ρύθμιση και την αφαίρεση των χρόνων λήξης για ένα δεδομένο κλειδί. Υποστηρίζει πολλά προαιρετικά ορίσματα για τον καθορισμό του χρόνου λήξης σε δευτερόλεπτα, χιλιοστά του δευτερολέπτου και UNIX-timestamp δευτερόλεπτα ή χιλιοστά του δευτερολέπτου. Όπως συζητήθηκε, η εντολή παρέχει την επιλογή PERSIST για την αφαίρεση του συσχετισμένου TTL για ένα δεδομένο κλειδί. Συνολικά, η εντολή GETEX λειτουργεί με σταθερή χρονική πολυπλοκότητα.