Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Speed Optimization
  5. (ক্যাশিং ০ ৩. )Redis দিয়ে ভিউ ক্যাশিং

(ক্যাশিং ০ ৩. )Redis দিয়ে ভিউ ক্যাশিং

ধরি, আপনার একটি ব্লগ ওয়েবসাইট আছে যেখানে কিছু জনপ্রিয় পোস্ট রয়েছে। আপনার এই ব্লগের একটি পৃষ্ঠা রয়েছে যেখানে navbar, সাইডবার, পোস্টের তালিকা এবং footer আছে। আপনি চান এই পৃষ্ঠাটি দ্রুত লোড হোক এবং ইউজারদের জন্য সেরা অভিজ্ঞতা প্রদান করুক। এজন্য, আপনি Django-তে ভিউ ক্যাশিং ব্যবহার করবেন।

এখন আমরা Django প্রোজেক্টে Redis ব্যবহার করে ভিউ ক্যাশিং সেটআপ করার একটি পূর্ণাঙ্গ গাইড তৈরি করব। Redis হল একটি ইন-মেমরি ডেটাবেস যা ক্যাশিংয়ের জন্য খুবই জনপ্রিয়। এটি দ্রুতগতির কারণে ডেটা দ্রুত রিট্রিভ করার সুবিধা দেয়।

আমরা পুরো প্রক্রিয়াটি ধাপে ধাপে দেখাবো:

ধাপ ১: Django প্রোজেক্ট তৈরি করা

প্রথমে, আপনার Django প্রোজেক্ট তৈরি করুন। যদি আপনার Django ইনস্টল না থাকে, তবে প্রথমে ইনস্টল করুন:

pip install django

এখন একটি নতুন Django প্রোজেক্ট তৈরি করুন:

django-admin startproject myblog
cd myblog

এখন একটি অ্যাপ তৈরি করুন:

python manage.py startapp blog

ধাপ ২: Redis ইনস্টলেশন

Redis ইনস্টল করতে হবে। আপনার সিস্টেমের উপর নির্ভর করে ইনস্টলেশন পদ্ধতি ভিন্ন হতে পারে। উদাহরণস্বরূপ, যদি আপনি Ubuntu ব্যবহার করেন, তবে:

sudo apt update
sudo apt install redis-server

Redis সার্ভার চালু করতে:

sudo systemctl start redis.service

Redis-কে চালু হচ্ছে কিনা নিশ্চিত করার জন্য:

redis-cli ping

এটি PONG রিটার্ন করবে, যা নির্দেশ করে যে Redis সঠিকভাবে চলছে।

ধাপ ৩: Django-তে Redis ইনস্টল করা

Django প্রোজেক্টে Redis ক্যাশিং ব্যবহার করতে, django-redis প্যাকেজটি ইনস্টল করতে হবে:

pip install django-redis

ধাপ ৪: Django সেটিংসে Redis কনফিগার করা

এখন আমাদের Django সেটিংসে Redis ক্যাশ ব্যবহার করার জন্য কনফিগার করতে হবে। settings.py ফাইলে নিম্নলিখিত কোড যুক্ত করুন:

# myblog/settings.py

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

ধাপ ৫: মডেল তৈরি করা

এখন আমাদের ব্লগের জন্য মডেল তৈরি করতে হবে:

# blog/models.py

from django.db import models
from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from django.core.cache import cache

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    is_popular = models.BooleanField(default=False)

    def __str__(self):
        return self.title

# সিগনাল দিয়ে ক্যাশ ক্লিয়ার করার জন্য
@receiver(post_save, sender=Post)
@receiver(post_delete, sender=Post)
def clear_popular_posts_cache(sender, instance, **kwargs):
    # ক্যাশের কিশ নাম ব্যবহার করে ডিলিট করুন
    cache.delete(f'view_cache_{instance.id}')  # এই ক্ষেত্রে instance.id ব্যবহার করা হলো

ধাপ ৬: ভিউ ক্যাশিং সেটআপ করা

এখন popular_posts নামের একটি ভিউ তৈরি করি:

# blog/views.py

from django.views.decorators.cache import cache_page
from django.shortcuts import render
from .models import Post

@cache_page(60 * 15)  # 15 মিনিটের জন্য ক্যাশে রাখুন
def popular_posts(request):
    posts = Post.objects.filter(is_popular=True)  # জনপ্রিয় পোস্টগুলি প্রাপ্ত করুন
    return render(request, 'blog/popular_posts.html', {'posts': posts})

ধাপ ৭: টেমপ্লেট তৈরি করা

এখন আমরা একটি HTML টেমপ্লেট তৈরি করবো:

<!-- blog/templates/blog/popular_posts.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Popular Posts</title>
</head>
<body>
    <nav>
        <h1>My Blog</h1>
        <!-- নেভিগেশন বার -->
    </nav>
    <div>
        <h2>Popular Posts</h2>
        <ul>
            {% for post in posts %}
                <li>{{ post.title }}</li>
            {% endfor %}
        </ul>
    </div>
    <footer>
        <!-- ফুটার -->
        <p>© 2024 My Blog</p>
    </footer>
</body>
</html>

ধাপ ৮: URL কনফিগারেশন

এখন আমাদের URL কনফিগার করতে হবে:

# myblog/urls.py

from django.contrib import admin
from django.urls import path
from blog.views import popular_posts

urlpatterns = [
    path('admin/', admin.site.urls),
    path('popular-posts/', popular_posts, name='popular_posts'),
]

ধাপ ৯: মাইগ্রেশন ও সার্ভার চালানো

মডেল তৈরি করার পর, ডাটাবেসে মাইগ্রেশন করতে হবে:

python manage.py makemigrations
python manage.py migrate

এখন Django সার্ভার চালু করুন:

python manage.py runserver

ধাপ ১০: পোস্ট তৈরি করা

Django অ্যাডমিন প্যানেলে গিয়ে কিছু পোস্ট তৈরি করুন। এরপর /popular-posts/ URL-এ যান এবং দেখুন জনপ্রিয় পোস্টগুলো কিভাবে ক্যাশে হয়ে আসে। প্রথমবার পৃষ্ঠাটি লোড করার পর, এটি ডাটাবেজ থেকে তথ্য নিয়ে আসবে এবং ক্যাশে করবে। পরবর্তী বার যাওয়ার সময়, এটি ক্যাশ থেকে তথ্য আনবে।

ভিউ ক্যাশিং এবং ক্যাশ ডিলিট করার প্রসঙ্গে

১. ভিউ ক্যাশিং:

Django-তে যখন আমরা @cache_page ডেকোরেটর ব্যবহার করি, তখন এটি ক্যাশে রাখার জন্য একটি ইউনিক কিশ (key) তৈরি করে, যা সাধারাণত URL এর ভিত্তিতে তৈরি হয়। এই কারণে, বিশেষভাবে @cache_page এর সাথে কোনো নাম উল্লেখ করার প্রয়োজন নেই। এটি URL এর জন্য ক্যাশ রাখে এবং URL অনুযায়ী একটি ইউনিক কিশ তৈরি করে।

কাহিনীর ধারাবাহিকতা

প্রথম রিকোয়েস্ট:

ধরা যাক, একজন ব্যবহারকারী প্রথমবারের মতো /popular_posts URL এ প্রবেশ করছে। তখন Django প্রথমবারের মতো ভিউটি এক্সিকিউট করবে এবং ডাটাবেজ থেকে জনপ্রিয় পোস্টগুলোর তালিকা নিয়ে আসবে। ফলস্বরূপ, এই ভিউটি ১৫ মিনিটের জন্য ক্যাশে করা হবে এবং পুরো HTML টেমপ্লেট (নেভিগেশন, কনটেন্ট এবং ফুটারসহ) ক্যাশে সংরক্ষিত হবে।

দ্বিতীয় রিকোয়েস্ট:

একই ব্যবহারকারী যদি আবার /popular_posts URL-এ যায়, তাহলে Django ক্যাশে থেকে HTML টেমপ্লেটটি ফিরিয়ে দেবে। এতে করে ডাটাবেজের প্রতি একটি নতুন রিকোয়েস্ট করা হবে না, এবং সার্ভার রিসোর্স বাঁচবে।

পোস্ট আপডেট বা ডিলিট করার প্রক্রিয়া

যদি ব্যবহারকারী একটি পোস্ট আপডেট করে অথবা ডিলিট করে, তাহলে clear_popular_posts_cache সিগনাল ট্রিগার হবে। এতে করে ক্যাশ থেকে নির্দিষ্ট পোস্টের ক্যাশ কিশ ডিলিট হবে:

  • যদি একটি পোস্ট সংরক্ষিত হয়, তাহলে ওই পোস্টের ক্যাশ কিশ ডিলিট হবে।
  • যদি একটি পোস্ট মুছে ফেলা হয়, তাহলে তার ক্যাশ কিশও ডিলিট হবে।

এটি নিশ্চিত করবে যে, পরবর্তীবার যখন /popular_posts URL এ যাবো, তখন সর্বশেষ তথ্য দেখানো হবে, কারণ ক্যাশটি আপডেট হয়েছে।

How can we help?