Django-cachebot είναι ένα app Django που παρέχει αυτοματοποιημένες προσωρινή αποθήκευση και ακύρωση.
installation
& Nbsp? 1. easy_install Django-cachebot ή PIP εγκατάσταση Django-cachebot
& Nbsp? 2.
& Nbsp? Προσθήκη cachebot να INSTALLED_APPS σας
& Nbsp? 3.
& Nbsp? Ορίστε ένα backend cache για ένα από τα backends σε cachebots.backends, για παράδειγμα:
& Nbsp? CACHE_BACKEND = 'cachebot.backends.memcached: //127.0.0.1: 11211 / timeout = 0'
Τρέχουσα υποστηριζόμενες βάσεις είναι οι εξής:
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
Cachebot μαϊμού μπαλώματα την προεπιλεγμένη Django διευθυντής και queryset να κάνει CacheBotManager και CachedQuerySet οι προεπιλογές που χρησιμοποιούνται από το έργο σας Django.
Χρήση
Ας υποθέσουμε ότι είχατε ένα ερώτημα που έμοιαζε με αυτό και θα ήθελε να το cache:
Photo.objects.filter (user = χρήστης, κατάσταση = 2)
Απλά προσθέστε .cache () με την αλυσίδα queryset όπως έτσι:
Photo.objects.cache (). Φιλτράρετε (user = χρήστης, κατάσταση = 2)
Αυτό το ερώτημα θα πάρει ακυρωθεί εάν κάποια από τις ακόλουθες προϋποθέσεις:
1. Ένα από τα αντικείμενα που επιστρέφονται από το ερώτημα μεταβάλλεται.
2. Ο χρήστης μεταβάλλεται.
3. Φωτογραφία τροποποιείται και έχει την ιδιότητα = 2.
4. Η φωτογραφία έχει τροποποιηθεί και έχει χρήστη = χρήστη.
Αυτό το κριτήριο η ακύρωση είναι πιθανώς πάρα πολύ προσεκτικοί, γιατί δεν θέλουμε να ακυρώσουν αυτή τη μνήμη cache κάθε φορά φωτογραφίες με την κατάσταση = 2 αποθηκεύεται. Για να τελειοποιήσουν τα κριτήρια ακύρωση, μπορούμε να καθορίσουμε να ακυρώσει μόνο σε ορισμένους τομείς. Για παράδειγμα:
Photo.objects.cache («χρήστης»). Φιλτράρουν (user = χρήστης, κατάσταση = 2)
Αυτό το ερώτημα θα πάρει ακυρωθεί εάν κάποια από τις ακόλουθες προϋποθέσεις:
1. Ένα από τα αντικείμενα που επιστρέφονται από το ερώτημα μεταβάλλεται.
2. Ο χρήστης μεταβάλλεται.
3. Φωτογραφία τροποποιείται και έχει χρήστη = χρήστη.
Django-cachebot μπορεί επίσης να χειριστεί select_related, προς τα εμπρός σχέσεις, και να αντιστρέψει τις σχέσεις, δηλαδή:
Photo.objects.select_related (). Κρυφής μνήμης («χρήστης»). Φιλτράρουν (user__username = "David", κατάσταση = 2)
Photo.objects.cache («χρήστης»). Φιλτράρουν (user__username = "David", κατάσταση = 2)
Photo.objects.cache («message__sender»). Φιλτράρουν (message__sender = χρήστη, κατάσταση = 2)
Ρυθμίσεις
CACHEBOT_CACHE_GET προεπιλογή: False
αν CACHEBOT_CACHE_GET = true, όλα objects.get ερωτήματα αυτόματα θα αποθηκεύονται προσωρινά. Αυτό μπορεί να παρακαμφθεί σε επίπεδο διαχειριστή όπως έτσι:
κατηγορία Φωτογραφίες (models.Model):
& Nbsp? ...
& Nbsp? Αντικείμενα = models.Manager (cache_get = True)
CACHEBOT_CACHE_ALL προεπιλογή: False
αν CACHEBOT_CACHE_ALL = true, όλα τα ερωτήματα αυτόματα θα αποθηκεύονται προσωρινά. Αυτό μπορεί να παρακαμφθεί σε επίπεδο διαχειριστή όπως έτσι:
κατηγορία Φωτογραφίες (models.Model):
& Nbsp? ...
& Nbsp? Αντικείμενα = models.Manager (cache_all = True)
CACHE_PREFIX προεπιλογή: ''
Ας υποθέσουμε ότι έχετε μια ανάπτυξη και παραγωγή server που μοιράζονται την ίδια memcached διακομιστή. Κανονικά αυτό είναι μια κακή ιδέα, επειδή κάθε server μπορεί να αντικαταστήσετε τα πλήκτρα μνήμης cache του άλλου διακομιστή. Αν προσθέσετε CACHE_PREFIX στις ρυθμίσεις σας, όλα τα πλήκτρα μνήμης cache θα έχουν αυτό το πρόθεμα που προσαρτάται σε αυτά, ώστε να μπορείτε να αποφύγετε αυτό το πρόβλημα.
Προειδοποιήσεις (Σημαντικό!)
& Nbsp? 1. Django-cachebot απαιτεί Django 1.2 ή μεγαλύτερη
& Nbsp? 2. Προσθήκη / Αφαίρεση αντικειμένων με ManyRelatedManager δεν θα ακυρώσει αυτόματα. Αυτό συμβαίνει επειδή τα σήματα για αυτούς τους τύπους των εργασιών δεν είναι Django μέχρι 1.2. Μέχρι τότε, θα πρέπει να ακυρώσει το χέρι αυτά τα ερωτήματα, όπως αυτό:
& Nbsp? Από cachebot.signals εισαγωγή invalidate_object
& Nbsp? User.friends.add (φίλος)
& Nbsp? Invalidate_object (χρήστη)
& Nbsp? Invalidate_object (φίλος)
& Nbsp? 3. μετράνε () ερωτήματα δεν θα μπαίνουν στην cache.
& Nbsp? 4. Αν είστε αναιρούν σε ένα πεδίο που είναι σε μία περιοχή ή να αποκλείσει το ερώτημα, αυτά τα ερωτήματα θα πάρει ακυρωθούν όταν τα πάντα στο τραπέζι αλλάζει. Για παράδειγμα θα μπορούσε να ακυρωθεί η ακόλουθη όταν τίποτα πάνω στο τραπέζι χρήστη άλλαξε:
& Nbsp?. Photo.objects.cache («χρήστης») φίλτρο (user__in = χρηστών, κατάσταση = 2)
& Nbsp?. Photo.objects.cache («χρήστης») αποκλείει (user = χρήστης, κατάσταση = 2)
& Nbsp? 5. Θα πρέπει να χρησιμοποιήσετε ένα εργαλείο όπως το Django-memcache-κατάστασης για να ελέγξετε την κατάσταση της μνήμης cache σας. Αν memcache γεμίζει τις ήδη υπεράριθμες και αρχίζει να ρίχνετε τα κλειδιά, είναι πιθανό ότι τα ερωτήματα σας δεν θα μπορούσε να πάρει ακυρωθεί.
& Nbsp? 6. .values_list () δεν προσωρινά ακόμα. Θα πρέπει να κάνουμε κάτι σαν αυτό, αντί:
& Nbsp? [. Φωτογραφία ['id'] για τη φωτογραφία στην Photo.objects.cache («χρήστης») φίλτρο (user = χρήστης) .values («ID»)]
& Nbsp? 7. Είναι πιθανό ότι υπάρχουν περιπτώσεις ακμής έχω χάσει. Django-cachebot είναι ακόμα σε νηπιακή ηλικία είναι, έτσι θα πρέπει να εξακολουθούν να διπλός έλεγχος ότι απορίες σας παίρνουν αποθηκεύονται προσωρινά και ακυρωθεί. . Παρακαλώ επιτρέψτε μου να ξέρω αν παρατηρήσετε κάποια παράξενα αποκλίσεις
Απαιτήσεις :
- Python
- Django
Τα σχόλια δεν βρέθηκε