Όσον αφορά το redis, όλοι το χρησιμοποιούν συχνά και το πιο χρησιμοποιούμενο σενάριο είναι η προσωρινή αποθήκευση δεδομένων.
αναθεώρηση
Ξεκινώντας με το redis 2.6.0, το redis έχει ενσωματωμένο διερμηνέα Lua και παρέχει μια εντολή eval για την ανάλυση της αξιολόγησης του σεναρίου Lua.
Σύνταξη: eval script numkeys args
Παράμετροι:
eval — Το Redis παρέχει εντολές για την ανάλυση του σεναρίου lua
Σενάριο — Σενάριο Lua
numkeys — Καθορίζει τον αριθμό των κλειδιών στο σύνολο παραμέτρων ονόματος κλειδιού
keys — Το σύνολο παραμέτρων ονόματος κλειδιού, που αντιπροσωπεύεται από τον καθολικό πίνακα μεταβλητών KEYS, ξεκινώντας με δείκτη 1
args — Ένα σύνολο παραμέτρων κλειδιού-τιμής, που αντιπροσωπεύεται από έναν πίνακα καθολικών μεταβλητών ARGV, ξεκινώντας με δείκτη 1
Πλεονεκτήματα της χρήσης Lua στο Redis
Μειώστε την επιβάρυνση του δικτύου. Μπορούν να σταλούν πολλαπλά αιτήματα ταυτόχρονα με τη μορφή σεναρίων για τη μείωση του λανθάνοντος χρόνου δικτύου Ατομικός χειρισμός. Το Redis θα εκτελέσει ολόκληρο το σενάριο στο σύνολό του, χωρίς να παρεμβάλλονται άλλες εντολές ενδιάμεσα. Επομένως, δεν χρειάζεται να ανησυχείτε για τις συνθήκες αγώνα και τις συναλλαγές κατά τη διαδικασία του σεναρίου. Αποκαταστάθηκε. Τα βήματα που αποστέλλονται από τον πελάτη αποθηκεύονται επίμονα στο redis, έτσι ώστε άλλοι πελάτες να μπορούν να επαναχρησιμοποιήσουν το σενάριο χωρίς να χρειάζεται να χρησιμοποιήσουν κώδικα για να ολοκληρώσουν την ίδια λογική.
Ατομικότητα σεναρίου
Τα σενάρια Lua δεν μπορούν να έχουν χρονοβόρες λειτουργίες ή νεκρούς βρόχους, διαφορετικά το redis δεν θα δεχτεί άλλες εντολές και δεν θα εκτελεστεί για να σταματήσει την εκτέλεση του σεναρίου
Το Redis χρησιμοποιεί έναν μόνο διερμηνέα Lua για την εκτέλεση όλων των σεναρίων και διασφαλίζει ότι τα σενάρια εκτελούνται ατομικά.Αυτό σημαίνει ότι όταν εκτελείται ένα σενάριο, δεν θα εκτελεστούν άλλα σενάρια ή εντολές redis! Επομένως, εάν η τρέχουσα δέσμη ενεργειών εκτελείται αργά, ο διακομιστής ενδέχεται να μην είναι σε θέση να εκτελέσει την εντολή επειδή είναι απασχολημένος, όπως:
Κάθε σενάριο έχει ένα μέγιστο χρονικό όριο εκτέλεσης, η προεπιλεγμένη τιμή είναι 5 δευτερόλεπτα. Ο μέγιστος χρόνος εκτέλεσης ελέγχεται από την επιλογή lua-time-limit του αρχείου ρυθμίσεων redis.conf ή απευθείας χρησιμοποιώντας τις εντολές config get και config set. Όταν η εκτέλεση ενός σεναρίου φτάσει στον μέγιστο χρόνο εκτέλεσης, το Redis δεν το τερματίζει ενεργά, εκτελεί τα ακόλουθα βήματα:
(1) Το Redis καταγράφει ότι ένα σενάριο εξαντλείται
(2) Το Redis αρχίζει να δέχεται ξανά αιτήματα από άλλους πελάτες, αλλά δέχεται μόνο την εκτέλεση εντολών kill script και τερματισμού λειτουργίας nosave.
(3) Εάν το σενάριο εκτελεί μόνο λειτουργίες ανάγνωσης, χρησιμοποιήστε την εντολή kill script για να σταματήσετε αμέσως το σενάριο. Εάν το σενάριο εκτελεί μια λειτουργία εγγραφής, μόνο η εντολή shutdown save/nosave επιτρέπεται να σταματήσει τον διακομιστή για να αποτρέψει την εγγραφή των τρεχόντων δεδομένων στο δίσκο. (Σε αυτό το σημείο, ο διακομιστής είναι εκτός λειτουργίας και τα δεδομένα δεν θα αποθηκευτούν)
παράδειγμα
Εκτελέστε το σενάριο, οι παράμετροι είναι 2 κλειδιά και τιμή και η εντολή είναι η εξής:
Σενάρια Deadloop, η εκτέλεση του ακόλουθου σεναρίου θα έχει ως αποτέλεσμα το redis να μην μπορεί να επεξεργαστεί άλλες εντολές και να κολλήσει:
Δοκιμάστε να χρησιμοποιήσετε μια δέσμη ενεργειών για να προσθέσετε δεδομένα τύπου συμβολοσειράς με την ακόλουθη εντολή:
Εκτελέστε μερικά πιο σύνθετα σενάρια, εάν η τιμή του κλειδιού είναι ίση με την τιμή που περάσαμε, τότε διαγράψτε την προσωρινή μνήμη, διαφορετικά κάντε οτιδήποτε, η εντολή είναι η εξής:
Τα αποτελέσματα της υλοποίησης έχουν ως εξής:
(Τέλος)
|