python / intermediate
Snippet
Django Caching-Framework mit Per-View-Cache
Djangos Caching-Framework reduziert Datenbanklast, indem gerenderte Seiten oder berechnete Daten im Speicher gespeichert werden. Der @cache_page-Decorator cached automatisch gesamte View-Antworten basierend auf URL - nachfolgende Anfragen geben gecachten Inhalt zurück. Für mehr Kontrolle erlaubt die Low-Level-Cache-API manuelles Abrufen/Setzen/Löschen von Cache-Einträgen mit benutzerdefinierten Schlüsseln. Cache-Backends umfassen lokalen Speicher (Entwicklung), Memcached, Redis und Datenbank-basiertes Caching. Der Cache-Schlüssel sollte Versionsnummern enthalten beim Deployment, um das Servieren von veralteten gecachten Daten zu verhindern.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# settings.pyCACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache','LOCATION': 'unique-snowflake','OPTIONS': {'MAX_ENTRIES': 1000,'TTL': 60 * 15, # 15 minutes}}}# views.pyfrom django.views.decorators.cache import cache_pagefrom django.core.cache import cache@cache_page(60 * 60) # Cache for 1 hourdef expensive_list_view(request):# Expensive DB queries or computations herereturn render(request, 'expensive.html')# View with cache key based on GET parameters@cache_page(60 * 30, key_prefix='product_list')def product_list(request):category = request.GET.get('category', 'all')products = Product.objects.filter(category=category)return render(request, 'products.html', {'products': products})# Manual cache operationsdef get_homepage_stats():cache_key = 'homepage_stats_v2'stats = cache.get(cache_key)if stats is None:stats = compute_expensive_stats()cache.set(cache_key, stats, timeout=3600)return stats
django
Erklärung
1
@cache_page(60 * 60)
Decorator cached View-Ausgabe für angegebene Sekunden (3600 = 1 Stunde)
2
cache.get(cache_key)
Ruft Wert aus Cache ab, gibt None zurück wenn Schlüssel nicht existiert
3
cache.set(cache_key, stats, timeout=3600)
Speichert Wert mit optionaler TTL (Lebensdauer) in Sekunden