Caching auf QuerySet-Ebene in DjangoPython

Python-Programme
Anonymous
 Caching auf QuerySet-Ebene in Django

Post by Anonymous »

Ich versuche, einen Abfragesatz aus dem Cache abzurufen, bin mir aber nicht sicher, ob das überhaupt einen Sinn hat.
Ich habe die folgende Methode (vereinfacht) in einem benutzerdefinierten Abfragesatz:

Code: Select all

    def queryset_from_cache(self, key: str=None, timeout: int=60):
# Generate a key based on the query.
if key is None:
key = self.__generate_key # ()

# If the cache has the key, return the cached object.
cached_object = cache.get(key, None)

# If the cache doesn't have the key, set the cache,
# and then return self (from DB) as cached_object
if cached_object is None:
cached_object = self
cache.set(key, cached_object , timeout=timeout)

return cached_object
Die Verwendung besteht im Wesentlichen darin, es an eine Django-QuerySet-Methode anzuhängen, zum Beispiel:

Code: Select all

queryset = MyModel.objects.filter(id__range=[0,99]).queryset_from_cache()

Meine Frage:

Würde eine solche Verwendung funktionieren?
Oder würde sie MyModel.objects.filter(id__range=[0,99]) aus der Datenbank aufrufen, egal was passiert?

Da das Caching normalerweise so erfolgen würde:

Code: Select all

cached_object = cache.get(key, None)

if cached_object is None:
cached_object = MyModel.objects.filter(id__range=[0,99])
#Only now call the query
cache.set(key, cached_object , timeout=timeout)

Und daher wird die Methode queryset filter() nur dann aufgerufen, wenn der Schlüssel nicht im Cache vorhanden ist, anstatt ihn immer aufzurufen und dann zu versuchen, ihn mit der Methode queryset_from_cache aus dem Cache abzurufen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post