Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Speed Optimization
  5. ( ক্যাশিং ০ ১. ১ )Django অ্যাডমিন প্যানেলে Redis ব্যবহার করে ক্যাশিং

( ক্যাশিং ০ ১. ১ )Django অ্যাডমিন প্যানেলে Redis ব্যবহার করে ক্যাশিং

django_redis হলো Django-তে Redis ক্যাশিং সেটআপ করার একটি প্যাকেজ, যা Django এর ডিফল্ট ক্যাশিং সিস্টেমের সাথে Redis ইন্টিগ্রেট করে। Redis একটি দ্রুত ইন-মেমোরি ডাটাবেস, যা সাধারণত ডেটা ক্যাশ করতে ব্যবহৃত হয়। এটি Django অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সহায়ক।

এখানে django_redis সেটআপ এবং ব্যবহারের ধাপগুলো ব্যাখ্যা করা হলো:

১. প্রয়োজনীয়তা

প্রথমে আপনার Redis সার্ভার ইনস্টল করা থাকতে হবে এবং চালু থাকতে হবে। Redis ইনস্টলেশন করতে নিচের কমান্ডটি ব্যবহার করতে পারেন:

sudo apt update
sudo apt install redis-server

এরপর, Redis সার্ভার চালু আছে কি না তা নিশ্চিত করতে এই কমান্ডটি ব্যবহার করুন:

redis-server --version

Redis চালু থাকলে, আপনি django_redis সেটআপ শুরু করতে পারেন।

২. django_redis ইনস্টলেশন

Python প্যাকেজ ম্যানেজার pip ব্যবহার করে django_redis ইনস্টল করুন:

pip install django-redis

Django অ্যাডমিন প্যানেলে Redis ব্যবহার করে ক্যাশিং-এর মাধ্যমে কিভাবে create, read, update, delete (CRUD) অপারেশনগুলো পরিচালনা করতে হয়, তা দেখানোর জন্য আমরা BlogPost মডেল ব্যবহার করবো। এতে করে আমাদের কাস্টম অ্যাডমিন ভিউতে ক্যাশ করা ডেটা প্রদর্শন করা যাবে।

Step 1: BlogPost Model

প্রথমে একটি মডেল তৈরি করি যদি তুমি আগে থেকেই মডেল তৈরি না করে থাকো:

# models.py

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def __str__(self):
        return self.title

Step 2: Redis Setup

settings.py-এ Redis ক্যাশ কনফিগার করো (যদি আগেই না করে থাকো):

# settings.py

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

Step 3: Admin Configuration

admin.py-এ মডেলটি রেজিস্টার করো এবং CRUD অপারেশনগুলোতে ক্যাশিং যুক্ত করো।

# admin.py

from django.contrib import admin
from django.core.cache import cache
from .models import BlogPost

class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title',)

    def save_model(self, request, obj, form, change):
        """Override the save_model method to cache the newly created or updated object."""
        super().save_model(request, obj, form, change)
        # Invalidate the cache
        cache.delete('all_blog_posts')

    def delete_model(self, request, obj):
        """Override the delete_model method to invalidate cache when an object is deleted."""
        super().delete_model(request, obj)
        # Invalidate the cache
        cache.delete('all_blog_posts')

    def get_queryset(self, request):
        """Override the get_queryset method to cache the list of all BlogPost objects."""
        posts = cache.get('all_blog_posts')
        if not posts:
            posts = super().get_queryset(request)
            cache.set('all_blog_posts', posts, timeout=600)  # Cache for 10 minutes
        return posts

admin.site.register(BlogPost, BlogPostAdmin)

Step 4: Breakdown of the Code

  1. save_model: এই মেথডটি ব্লগ পোস্ট তৈরি বা আপডেট করার জন্য ব্যবহৃত হয়। পোস্ট সেভ করার পরে ক্যাশ মুছে ফেলা হয় যাতে নতুন ডেটা পেতে পারা যায়।
  2. delete_model: এই মেথডটি ব্লগ পোস্ট মুছে ফেলার জন্য ব্যবহৃত হয়। পোস্ট মুছে ফেলার পরে ক্যাশ মুছে ফেলা হয় যাতে পুরানো ডেটা প্রদর্শিত না হয়।
  3. get_queryset: এই মেথডটি ব্লগ পোস্টগুলোর তালিকা ফেচ করার জন্য ব্যবহৃত হয়। এটি প্রথমে ক্যাশ থেকে ডেটা ফেচ করার চেষ্টা করে। যদি ক্যাশে না থাকে, তবে ডাটাবেস থেকে ডেটা ফেচ করে ক্যাশে সেট করে।

Step 5: Using the Admin Interface

  • এখন তুমি Django অ্যাডমিন প্যানেলে BlogPost মডেল দেখতে পারবে।
  • নতুন ব্লগ পোস্ট তৈরি করলে বা কোনো পোস্ট আপডেট করলে, ক্যাশ ইনভ্যালিডেট হবে।
  • অ্যাডমিন প্যানেল থেকে ব্লগ পোস্টগুলোর তালিকা দেখতে গেলে, ক্যাশ থেকে ডেটা ফেচ হবে, যা পারফরম্যান্স বাড়াতে সাহায্য করবে।

Conclusion

এইভাবে, তুমি Django অ্যাডমিন প্যানেলে Redis ক্যাশিং ব্যবহার করে CRUD অপারেশনগুলো পরিচালনা করতে পারো। এটি ডেটা অ্যাক্সেসের গতিশীলতা বাড়াতে সাহায্য করবে এবং দ্রুত প্রতিক্রিয়া নিশ্চিত করবে।

How can we help?