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
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)
Mobile version