Η χρήση της προσωρινής μνήμης Redis βελτιώνει σημαντικά την απόδοση και την αποδοτικότητα των εφαρμογών, ειδικά για την αναζήτηση δεδομένων. Ταυτόχρονα όμως φέρνει και κάποια προβλήματα. Μεταξύ αυτών, το πιο σημαντικό πρόβλημα είναι η συνέπεια των δεδομένων, η οποία είναι αυστηρά άλυτη. Εάν απαιτείται συνέπεια δεδομένων, τότε δεν μπορεί να χρησιμοποιηθεί η προσωρινή αποθήκευση.
Άλλα τυπικά προβλήματα είναι η διείσδυση της κρυφής μνήμης, η χιονοστιβάδα της κρυφής μνήμης και η διάσπαση της κρυφής μνήμης. Επί του παρόντος, υπάρχουν επίσης πιο δημοφιλείς λύσεις στον κλάδο. Αυτό το άρθρο δεν έχει σκοπό να λύσει αυτά τα τρία προβλήματα πιο τέλεια, ούτε να ανατρέψει τις δημοφιλείς λύσεις στον κλάδο. Αντίθετα, θα δείξουμε αυτά τα τρία προβληματικά φαινόμενα από την πραγματική λειτουργία κώδικα. Ο λόγος για να το κάνετε αυτό είναι ότι είναι δύσκολο να έχετε μια πολύ ζωντανή έννοια στο κεφάλι απλά κοιτάζοντας την ακαδημαϊκή εξήγηση αυτών των προβλημάτων και με πραγματικές επιδείξεις κώδικα, μπορείτε να εμβαθύνετε την κατανόηση και την κατανόησή σας για αυτά τα προβλήματα.
Διείσδυση κρυφής μνήμης
Η διείσδυση της προσωρινής μνήμης αναφέρεται στην αναζήτηση δεδομένων που δεν υπάρχουν σε μια βάση δεδομένων. Εάν το κλειδί δεν υπάρχει ή το κλειδί έχει λήξει, υποβάλλεται ερώτημα στη βάση δεδομένων και τα αντικείμενα που ζητούνται τοποθετούνται στο cache. Εάν το αντικείμενο ερωτήματος βάσης δεδομένων είναι κενό, δεν αποθηκεύεται στο cache.
Ροή κώδικα
- Η παράμετρος μεταβιβάζει το αναγνωριστικό πρωτεύοντος κλειδιού του αντικειμένου
- Λάβετε το αντικείμενο από την κρυφή μνήμη με βάση το κλειδί
- Εάν το αντικείμενο δεν είναι κενό, επιστρέφει απευθείας
- Εάν το αντικείμενο είναι κενό, εκτελέστε ένα ερώτημα βάσης δεδομένων
- Εάν το αντικείμενο που ζητήθηκε από τη βάση δεδομένων δεν είναι κενό, τοποθετήστε το στην κρυφή μνήμη (ορίστε τον χρόνο λήξης) Φανταστείτε αυτήν την κατάσταση, τι θα συνέβαινε αν η παράμετρος που μεταβιβάστηκε ήταν -1; Αυτό το -1 είναι ένα αντικείμενο που δεν πρέπει να υπάρχει. Η βάση δεδομένων θα ερωτάται κάθε φορά και κάθε ερώτημα θα είναι κενό και δεν θα αποθηκεύεται στην κρυφή μνήμη κάθε φορά. Εάν υπάρξει κακόβουλη επίθεση, αυτή η ευπάθεια μπορεί να αξιοποιηθεί για να ασκήσει πίεση στη βάση δεδομένων ή ακόμα και να την κατακλύσει. Ακόμα κι αν χρησιμοποιείται UUID, είναι εύκολο να βρείτε ένα ανύπαρκτο KEY και να επιτεθείτε.
Στην εργασία μου, θα χρησιμοποιήσω τη μέθοδο προσωρινής αποθήκευσης μηδενικών τιμών, δηλαδή το βήμα 5 στη [διαδικασία κώδικα], εάν το αντικείμενο που ζητήθηκε από τη βάση δεδομένων είναι κενό, τοποθετείται επίσης στην κρυφή μνήμη, αλλά ο καθορισμένος χρόνος λήξης της προσωρινής μνήμης είναι σύντομος, όπως η ρύθμιση στα 60 δευτερόλεπτα.
Cache χιονοστιβάδα
Η χιονοστιβάδα της κρυφής μνήμης αναφέρεται στη λήξη του συνόλου της κρυφής μνήμης κατά τη διάρκεια μιας συγκεκριμένης χρονικής περιόδου.
Ένας από τους λόγους για τη χιονοστιβάδα, για παράδειγμα, όταν γράφετε αυτό το άρθρο, σύντομα θα είναι στο μηδέν η ώρα τη δωδέκατη ημέρα και σύντομα θα υπάρξει ένα κύμα βιαστικών αγορών. Στη συνέχεια, στη μία το πρωί, η κρύπτη αυτής της παρτίδας αγαθών θα λήξει. Το ερώτημα πρόσβασης για αυτήν την παρτίδα αγαθών εμπίπτει στη βάση δεδομένων και για τη βάση δεδομένων θα υπάρχουν περιοδικές αιχμές πίεσης.
Όταν ο Xiaobian κάνει έργα ηλεκτρονικού εμπορίου, γενικά υιοθετεί διαφορετικές κατηγορίες αγαθών και αποθηκεύει διαφορετικούς κύκλους. Εμπορεύματα της ίδιας κατηγορίας, συν έναν τυχαίο παράγοντα. Με αυτόν τον τρόπο, ο χρόνος λήξης της προσωρινής μνήμης μπορεί να διασκορπιστεί όσο το δυνατόν περισσότερο και ο χρόνος προσωρινής μνήμης των προϊόντων σε δημοφιλείς κατηγορίες είναι μεγαλύτερος και ο χρόνος προσωρινής μνήμης των προϊόντων σε μη δημοφιλείς κατηγορίες είναι μικρότερος, γεγονός που μπορεί επίσης να εξοικονομήσει τους πόρους της υπηρεσίας προσωρινής αποθήκευσης.
Στην πραγματικότητα, η κεντρική λήξη δεν είναι πολύ μοιραία και η πιο θανατηφόρα χιονοστιβάδα της κρυφής μνήμης είναι ότι ένας κόμβος του διακομιστή κρυφής μνήμης πέφτει ή αποσυνδέεται. Επειδή η χιονοστιβάδα της κρυφής μνήμης που εμφανίζεται φυσικά πρέπει να δημιουργηθεί σε μια συγκεκριμένη χρονική περίοδο, τότε η βάση δεδομένων μπορεί να αντέξει την πίεση και αυτή τη στιγμή, η βάση δεδομένων μπορεί επίσης να αντέξει την πίεση. Δεν είναι τίποτα άλλο από περιοδική πίεση στη βάση δεδομένων. Ο χρόνος διακοπής λειτουργίας του κόμβου της υπηρεσίας προσωρινής μνήμης προκαλεί απρόβλεπτη πίεση στον διακομιστή της βάσης δεδομένων και είναι πιθανό να κατακλύσει τη βάση δεδομένων σε μια στιγμή.
Ανάλυση προσωρινής μνήμης
Η ανάλυση της προσωρινής μνήμης αναφέρεται σε ένα κλειδί που είναι πολύ ζεστό, μεταφέρει συνεχώς μεγάλο συγχρονισμό, ο μεγάλος συγχρονισμός επικεντρώνεται στην πρόσβαση σε αυτό το σημείο, όταν αυτό το κλειδί αποτυγχάνει, ο συνεχής μεγάλος συγχρονισμός διαπερνά την κρυφή μνήμη και ζητά απευθείας τη βάση δεδομένων, ακριβώς όπως ανοίγει μια τρύπα σε ένα φράγμα.
Όταν ο Xiaobian έκανε έργα ηλεκτρονικού εμπορίου, έκανε αυτό το προϊόν «επιτυχία».
Στην πραγματικότητα, στις περισσότερες περιπτώσεις, αυτού του είδους η έκρηξη είναι δύσκολο να ασκήσει συντριπτική πίεση στον διακομιστή της βάσης δεδομένων. Λίγες είναι οι εταιρείες που έχουν φτάσει σε αυτό το επίπεδο. Επομένως, ο ρεαλιστικός επεξεργαστής έχει προετοιμαστεί νωρίς για τα κύρια προϊόντα, έτσι ώστε η προσωρινή μνήμη να μην λήξει ποτέ. Ακόμα κι αν ορισμένα προϊόντα ζυμωθούν μόνα τους σε επιτυχίες, μπορούν να οριστούν ως μη λήγοντα ποτέ.
Ο κεντρικός δρόμος είναι απλός και η κλειδαριά αμοιβαίας απόρριψης κλειδιού mutex δεν χρησιμοποιείται πραγματικά.
|