django-cachebot

Software screenshot:
django-cachebot
Dettagli del software:
Versione: 0.4.1
Data di caricamento: 11 May 15
Sviluppatore: David Ziegler
Licenza: Libero
Popolarità: 11

Rating: 3.0/5 (Total Votes: 1)

django-cachebot è un app Django che offre il caching automatico e invalidazione.
Installazione
& Nbsp; 1. easy_install django-cachebot o PIP installare django-cachebot
& Nbsp; 2.
& Nbsp; Aggiungi cachebot a INSTALLED_APPS
& Nbsp; 3.
& Nbsp; Impostare un backend cache per uno dei backend in cachebots.backends, ad esempio:
& Nbsp; CACHE_BACKEND = 'cachebot.backends.memcached:? //127.0.0.1: 11211 / timeout = 0'
Backend supportati attuali sono:
cachebot.backends.dummy
cachebot.backends.memcached
cachebot.backends.pylibmcd
Cachebot scimmia patch di default Django manager e queryset fare CacheBotManager e CachedQuerySet le impostazioni predefinite utilizzate dal progetto Django.
Utilizzo
Supponete di avere una query che si presentava così e di voler mettere in cache esso:
Photo.objects.filter (user = utente, stato = 2)
Basta aggiungere .cache () per la catena queryset in questo modo:
Photo.objects.cache (). Filtrare (user = utente, stato = 2)
Questa query otterrà invalidata se una delle seguenti condizioni:
1. Uno degli oggetti restituiti dalla query è alterata.
2. L'utente è alterato.
3. La foto viene modificata e ha uno status = 2.
4. La foto viene modificata e ha user = utente.
Questo criterio di invalidazione è probabilmente troppo prudenti, perché non vogliamo che per invalidare questa cache ogni volta che una foto con lo stato = 2 viene salvato. Per mettere a punto i criteri di invalidazione, possiamo specificare per invalidare solo su certi campi. Per esempio:
Photo.objects.cache ('user'). Filtrare (user = utente, stato = 2)
Questa query otterrà invalidata se una delle seguenti condizioni:
1. Uno degli oggetti restituiti dalla query è alterata.
2. L'utente è alterato.
3. La foto viene modificata e ha user = utente.
django-cachebot può anche gestire select_related, i rapporti in avanti, e invertire le relazioni, vale a dire:
Photo.objects.select_related (). Cache ('utente'). Filtrare (user__username = "David", status = 2)
Photo.objects.cache ('user'). Filtrare (user__username = "David", status = 2)
Photo.objects.cache ('message__sender'). Filtrare (message__sender = user, stato = 2)
Impostazioni
Predefinito CACHEBOT_CACHE_GET: False
se CACHEBOT_CACHE_GET = TRUE, verranno automaticamente memorizzati nella cache tutte le query objects.get. Questo può essere ignorata a livello di direttore in questo modo:
Classe Foto (models.Model):
& Nbsp; ...
& Nbsp; oggetti = models.Manager (cache_get = True)
Predefinito CACHEBOT_CACHE_ALL: False
se CACHEBOT_CACHE_ALL = TRUE, verranno automaticamente memorizzati nella cache tutte le query. Questo può essere ignorata a livello di direttore in questo modo:
Classe Foto (models.Model):
& Nbsp; ...
& Nbsp; oggetti = models.Manager (cache_all = True)
Predefinito CACHE_PREFIX: ''
Supponiamo di avere uno sviluppo e server di produzione condividendo lo stesso server memcached. Normalmente questo è una cattiva idea, perché ogni server potrebbe essere sovrascrittura chiavi della cache dell'altro server. Se si aggiungono CACHE_PREFIX alle impostazioni, tutti i tasti della cache avranno il prefisso aggiunto a loro in modo è possibile evitare questo problema.
Avvertenze (Importante!)
& Nbsp; 1. django-cachebot richiede django 1.2 o superiore
& Nbsp; 2. Aggiunta / Rimozione oggetti con una ManyRelatedManager non invaliderà automaticamente. Questo perché segnali per questi tipi di operazioni non sono in Django fino 1.2. Fino ad allora, sarà necessario invalidare manualmente queste domande in questo modo:
& Nbsp; da cachebot.signals importare invalidate_object
& Nbsp; user.friends.add (amico)
& Nbsp; invalidate_object (utente)
& Nbsp; invalidate_object (amico)
& Nbsp; 3. count () query non avranno cache.
& Nbsp; 4. Se stai invalidare su un campo che è in un intervallo o escludere di query, queste query avranno invalidato quando nulla cambia tabella. Ad esempio, il seguente otterrebbe invalidato quando nulla sul tavolo User cambiato:
& Nbsp;. Photo.objects.cache ('user') filtrare (user__in = utenti, stato = 2)
& Nbsp;. Photo.objects.cache ('user') escludere (user = utente, stato = 2)
& Nbsp; 5. Probabilmente è meglio usare uno strumento come django-memcache-stato per verificare lo stato della cache. Se memcache overfills e inizia cadere le chiavi, è possibile che le query non potrebbe avere invalidato.
& Nbsp; 6. .values_list () non è ancora nella cache. Si dovrebbe fare qualcosa di simile a questo, invece:
& Nbsp; [. Foto ['id'] per la foto in Photo.objects.cache ('user') filtrare (user = utente) .values ​​('id')]
& Nbsp; 7. E 'possibile che ci siano casi limite che ho perso. django-cachebot è ancora nella sua infanzia, così si dovrebbe ancora doppio controllo che le query vengono sempre memorizzati nella cache e invalidata. . Per favore fatemi sapere se si notano discrepanze strani

Requisiti

  • Python
  • Django

Altri software di sviluppo David Ziegler

django-urlcrypt
django-urlcrypt

12 May 15

Commenti a django-cachebot

I commenti non trovato
Aggiungi commento
Accendere le immagini!