بهترین سورس برای کش توی جنگو خود سایتشه طبق معرفی این سایت بهترین و پر سرعت ترین نوع کش همون memcache که برای استفادش یک پکیج پایتون باید نصب بشه که دستور نصبش توی لینوکس sudo apt install memcached و هم چنین توی ماشین مجازی باید پکیج
pip install django-memcached نصب بشه خب حالا وقتشه که ما توی setting مشخص کنیم که قرار نیست از کش دیفالت برنامه استفاده کنیم
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': [ '127.0.0.1:11211', '0.0.0.0:11211', ] } }
برای این لوکیشن باید ip هایی که روش سرور رو میاریم بالا رو بهش بدیم حالا که اعلام شد وقت پیاده سازیش هست همونطور که توی سورس اصلی ذکر شده پیاده سازی ما توی بحث رستفول میتونه به دو نوع باشه یکی استفاده از کش برای کش کردن یک پیج به صورت کامل یا url هست یا این کش به صورت کش یک لیست هست فقط یعنی یک گروهی از کوئری ها. خب بحث دیگ ای که حتما باید تو ریکوئست ها لحاظ بشه مشخص کردن هدر ما این رو داخل المان های ای جکس وارد کردیم
headers :{ "Cache-Control": "max-age=0" }
این هدر باید مشخص بشه تا فرانت بتونه پاک شدن کش رو تشخیص بده حالا یک سوالی که پیش میاد ما کی کش رو پاک کنیم ؟!؟ وقتی که اطلاعات ما تغییر میکنه و اون اطلاعات همون تایم باید به یوزر نمایش داده بشه ما باید کش رو پاک کنیم حالا کش رو چجوری پاکش کنیم یا از ادمین استفاده کنیم با نصب این پکیج یا این پکیج ممکنه .خب این راه دستیشه ما می تونیم این رو توی کدمون لحاظ کنیم به صورت تعریف سیگنال :
@receiver(post_save, sender=Course) @receiver(post_save, sender=Support) def clear_cache(sender, instance, **kwargs): cache.clear()
من با تعریف این کد گفتم که آقا اگر یکی از آبجکت های جدول Course و یا Support من تغییر کرد یا حذف و اضافه داشت شما بگیر کش رو پاک کن این تیکه کد رو برای بحث اصولی میشه یک فایل به اسم signals.py توی اپ ایجاد کرد و این رو اونجا اضافه کرد البته هر جای دیگ که بخوایم هم می تونیم بذاریمش. نکته قابل توجه تو این نوع کش اینه که چون روی یک پورت دیگ از سرور میاد بالا حتی با خاموش کردن سرور این نوع کش پاک نمیشه و ما باید حتما clear cache کنیم وگرنه تو اون ساعتی که براش مقرر کردیم کش همچنان داره کار خودش رو می کنه.