Django ایک لچکدار caching framework شامل کرتا ہے جو caching کی متعدد سطحوں (مکمل صفحات، view کے نتائج، template کے ٹکڑے، یا صوابدلانہ ڈیٹا) اور متعدد backends (میموری میں، Redis، Memcached، database) کو سپورٹ کرتا ہے۔ Caching مہنگے کام کو دہرانے سے بچاتی ہے — یہ کارکردگی میں بہتری کے سب سے زیادہ اثر و رسوخ والی تکنیکوں میں سے ایک ہے۔
cache backend کو ترتیب دینا
# settings.py — Redis is the common production choice (shared across servers)
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
}
}
# other backends: LocMemCache (in-memory, per-process), Memcached, database, file
caching کی سطحیں (بڑے پیمانے سے باریک تک)
# 1. Per-view caching — cache an entire view's output
from django.views.decorators.cache import cache_page
@cache_page(60 * 15) # cache this view's response for 15 minutes
def article_list(request):
...
<!-- 2. Template fragment caching — cache part of a template -->
{% load cache %}
{% cache 500 sidebar %}
... expensive sidebar rendering ... <!-- cached for 500 seconds -->
{% endcache %}
# 3. Low-level cache API — cache ANY data, full control
from django.core.cache import cache
def get_stats():
stats = cache.get("dashboard_stats") # check cache first
if stats is None: # cache MISS
stats = compute_expensive_stats() # do the work
cache.set("dashboard_stats", stats, 3600) # store for 1 hour
return stats
Django آپ کو متعدد granularities میں cache کرنے کی اجازت دیتا ہے: مکمل صفحات (cache_page)، template کے ٹکڑے ({% cache %})، اور صوابدلانہ ڈیٹا کم سطح کی API کے ذریعے (cache.get/cache.set — لچکدار get-or-compute pattern)۔ middleware کے ذریعے مکمل سائٹ caching بھی ہے۔
مشکل حصہ: cache invalidation
# when underlying data changes, the cache must be updated or cleared, or users see stale data
def update_article(article):
article.save()
cache.delete("article_list") # invalidate affected cache entries
# strategies: TTL (accept brief staleness), explicit deletion on writes, versioned keys,
# or signals to invalidate on model save/delete
Cache invalidation is the classic hard problem: when data changes, stale cached
values must be cleared/refreshed. Approaches: short TTLs (accept some staleness),
explicit cache.delete on writes, or cache versioning/key schemes.
کیا cache کریں (اور کیا نہیں)
✓ Expensive queries/computations, rendered pages/fragments that change infrequently
✓ Aggregations, external API responses, session data
✗ Highly personalized or rapidly-changing data (or use very short TTLs / vary per user)
✗ Don't cache sensitive data carelessly (consider who can read the cache)
یہ اہم کیوں ہے
Caching Django applications کے لیے کارکردگی میں بہتری کی سب سے زیادہ اثر و رسوخ والی تکنیکوں میں سے ایک ہے، اور framework کے جامع، متعدد سطحوں والے caching سسٹم سے یہ قابلِ رسائی ہے — اس کو سمجھنا تیزی سے اور قابلِ توسیع applications بنانے کے لیے سینیئر سطح کے علم کے لیے قیمتی ہے۔
بنیادی قیمت مہنگے کام کو دہرانے سے بچنا ہے: database queries، پیچیدہ calculations، بیرونی API کالز، اور template rendering کو cache کیا جا سکتا ہے تاکہ بعد میں آنے والی requests تیزی سے serve ہوں، جو latency اور database/server لوڈ کو بہت کم کرتا ہے۔
Django کی لچک متعدد caching سطحوں میں (پورے صفحات کے لیے cache_page، template کے ٹکڑوں کے لیے {% cache %}، اور صوابدلانہ ڈیٹا کے لیے کم سطح کی API کے get-or-compute pattern کے ذریعے) آپ کو ہر صورتِ حال کے لیے بالکل صحیح granularity میں cache کرنے دیتی ہے، اور اس کے pluggable backends (خاص طور پر Redis متعدد سرورز میں shared cache کے لیے — اہم ہے کیونکہ per-process میموری میں caches افقی طور پر scaling کے وقت shared نہیں ہوتے) مختلف deployment ضروریات کے لیے موزوں ہیں۔
Caching کو ترتیب دینا، مناسب سطح کا انتخاب کرنا، اور deployment کے لیے صحیح backend منتخب کرنا کیسے کرنا ہے یہ عملی، اکثر ضروری علم ہے۔
برابر اہم caching کی مرکزی مشکل کو سمجھنا ہے — invalidation (صاف طور پر مشکل مسئلہ جب cached ڈیٹا کو صاف یا تازہ کرنا ہو جب بنیادی ڈیٹا بدل جائے، TTLs، writes پر explicit deletion، یا key versioning کے ذریعے، پرانا ڈیٹا serve کرنے سے بچنے کے لیے) — کیونکہ اگر یہ غلط ہو تو یہ caching کی روایتی ناکامی ہے جو users کو پرانی معلومات دکھاتی ہے۔
یہ بھی جاننا کیا cache کریں (مہنگا، کم بدلنے والا ڈیٹا) بمقابلہ کیا نہیں (انتہائی متحرک یا حساس ڈیٹا) caching کو موثر طریقے سے استعمال کرنے کے لیے کلیدی ہے۔
کیونکہ caching بڑی کارکردگی کے فوائد فراہم کرتی ہے لیکن احتیاط سے invalidation کی ضرورت ہے، Django کے caching framework میں مہارت حاصل کرنا — سطحیں، backends، اور خاص طور پر invalidation کی حکمت عملی — performant، قابلِ توسیع applications بنانے کے لیے اہم علم ہے اور یہ ایسے developers کی علامت ہے جو Django apps کو حقیقی load کے تحت تیز بنا سکتے ہیں۔
