একদিন, রাহুল নামে একজন ওয়েব ডেভেলপার তার নতুন ব্লগ সাইট তৈরি করতে বসেছে। তার ব্লগে অনেকগুলি পোস্ট রয়েছে এবং সে চাচ্ছে তার পাঠকদের জন্য সাইটটিকে দ্রুত লোড করতে। রাহুল জানে যে, সার্ভার থেকে প্রতিবার নতুন তথ্য আনতে গেলে সময় লাগে এবং এটি তার ব্যবহারকারীদের জন্য বিরক্তিকর হতে পারে। তাই, সে সিদ্ধান্ত নেয় Redis দিয়ে ক্যাশিং ব্যবহার করবে।
ধাপ ১: Redis ইনস্টল করা
রাহুল তার ল্যাপটপে Redis ইনস্টল করতে শুরু করে। সে টার্মিনাল খুলে নীচের কমান্ডটি চালায়:
sudo apt update
sudo apt install redis-server
ইনস্টলেশন শেষ হলে, সে Redis সার্ভার চালু করে:
redis-server
এখন সে জানে যে, তার ক্যাশিং সিস্টেমের মূল ভিত্তি তৈরি হয়ে গেছে।
ধাপ ২: Django প্রকল্পে Redis যুক্ত করা
রাহুল তার Django প্রকল্পে Redis-কে অন্তর্ভুক্ত করার জন্য django-redis প্যাকেজটি ইনস্টল করে:
pip install django-redis
এখন সে তার settings.py ফাইলটি খুলে Redis ক্যাশ সেটআপ করে:
# settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/1', # Redis সার্ভারের লোকেশন
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
}
}
ধাপ ৩: টেম্পলেট তৈরি করা
রাহুল এখন একটি টেম্পলেট তৈরি করতে শুরু করে যেখানে সে জনপ্রিয় পোস্টগুলো দেখাতে চায়। সে একটি নতুন ফাইল popular_posts.html তৈরি করে এবং এতে ক্যাশিং যুক্ত করে:
{% load cache %}
{% cache 600 popular_posts %}
<div>
<h2>Popular Posts</h2>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
</div>
{% endcache %}
এখানে 600 সেকেন্ড (১০ মিনিট) ক্যাশ থাকবে, যার ফলে পাঠকরা যখন পোস্টগুলি দেখবে, তখন তাদের জন্য সাইট দ্রুত লোড হবে।
ধাপ ৪: ভিউ এবং URL কনফিগারেশন
রাহুল তার ভিউ তৈরি করতে শুরু করে, যেখানে সে জনপ্রিয় পোস্টগুলির তালিকা তৈরি করবে:
# blog/views.py
from django.shortcuts import render
from .models import Post
def popular_posts(request):
posts = Post.objects.filter(is_popular=True) # জনপ্রিয় পোস্টগুলো নিয়ে আসা
return render(request, 'blog/popular_posts.html', {'posts': posts})
তারপর সে URL কনফিগার করে:
# myproject/urls.py
from django.urls import path
from blog.views import popular_posts
urlpatterns = [
path('popular-posts/', popular_posts, name='popular_posts'),
]
ধাপ ৫: ক্যাশ ক্লিয়ার করার ব্যবস্থা
রাহুল জানে যে, নতুন পোস্ট যোগ হলে বা আপডেট হলে পুরাতন ক্যাশ পরিষ্কার করতে হবে। এজন্য সে post_save এবং post_delete সিগন্যাল ব্যবহার করে:
# 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)
is_popular = models.BooleanField(default=False)
def __str__(self):
return self.title
# সিগন্যাল সেটআপ
@receiver(post_save, sender=Post)
def clear_popular_posts_cache_on_save(sender, instance, **kwargs):
# ক্যাশে রাখা জনপ্রিয় পোস্টের তথ্য মুছে দিন
cache.delete('popular_posts')
print(f'Cached popular posts cleared due to saving post: {instance.title}')
@receiver(post_delete, sender=Post)
def clear_popular_posts_cache_on_delete(sender, instance, **kwargs):
# ক্যাশে রাখা জনপ্রিয় পোস্টের তথ্য মুছে দিন
cache.delete('popular_posts')
print(f'Cached popular posts cleared due to deleting post: {instance.title}')
কোডের ব্যাখ্যা
- মডেল সংজ্ঞা:
- আমরা একটি
Postমডেল তৈরি করেছি, যেখানেtitleএবংis_popularনামের দুটি ফিল্ড রয়েছে। titleহলো পোস্টের শিরোনাম এবংis_popularহলো একটি বুলিয়ান ফিল্ড যা নির্দেশ করে যে পোস্টটি জনপ্রিয় কি না।
- আমরা একটি
- সিগন্যাল সেটআপ:
@receiver(post_save, sender=Post): এই ডেকোরেটর ব্যবহার করে আমরা নির্দেশ দিচ্ছি যে, যখনPostমডেলটি সেভ (save) হবে, তখনclear_popular_posts_cache_on_saveফাংশনটি কার্যকর হবে।@receiver(post_delete, sender=Post): এই ডেকোরেটর ব্যবহার করে আমরা নির্দেশ দিচ্ছি যে, যখনPostমডেলটি মুছে (delete) ফেলা হবে, তখনclear_popular_posts_cache_on_deleteফাংশনটি কার্যকর হবে।
- ক্যাশ পরিষ্কার:
- উভয় ফাংশনে,
cache.delete('popular_posts')ব্যবহার করে আমরাpopular_postsক্যাশটি পরিষ্কার করছি। এর ফলে, পরবর্তী সময়ে যখনpopular_postsক্যাশ করা হবে, তখন সেটি আপডেটেড তথ্য নিয়ে আসবে।
- উভয় ফাংশনে,
- প্রিন্ট স্টেটমেন্ট:
- প্রতি সিগন্যালের কার্যকর হওয়ার পরে আমরা একটি প্রিন্ট স্টেটমেন্ট যোগ করেছি যা কনসোলে মেসেজ দেখাবে, যেমন “Cached popular posts cleared due to saving post: [post title]”।
ব্যবহারিক উপকারিতা
- এই সিগন্যাল সেটআপটি আপনার ক্যাশ ব্যবস্থাপনায় খুব কার্যকর। এটি নিশ্চিত করে যে আপনার ব্যবহারকারীরা সর্বদা সর্বশেষ তথ্য পান, বিশেষ করে যখন পোস্ট সেভ বা ডিলেট করা হয়। এটি আপনার ব্লগের রেসপন্সিভনেস এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করবে।
ক্যাশিং কিভাবে কাজ করে
- ক্যাশ তৈরি: যখন আপনি
popular_postsটেম্পলেট ক্যাশে রাখবেন, Django এটিকে একটি কী হিসাবে সংরক্ষণ করবে। উদাহরণস্বরূপ, আমরা যখনpopular_postsক্যাশ করতেpopular_postsকী ব্যবহার করি, তখন সেই কী সহ ক্যাশড তথ্য তৈরি হবে। - ক্যাশ পরিষ্কার: যখন নতুন একটি পোস্ট সংরক্ষণ বা মুছে ফেলা হয়, তখন শুধুমাত্র
popular_postsকীটি মুছে দেওয়া হবে। এটি নিশ্চিত করে যে, অন্যান্য ক্যাশড তথ্য অক্ষুণ্ণ থাকবে এবং শুধুমাত্র সেই তথ্য যা পরিবর্তিত হয়েছে, তা পুনরুদ্ধার করা হবে।
বাস্তব উদাহরণ
- ধরুন, আপনার ব্লগে ১০টি পোস্ট রয়েছে এবং
2টি পোস্ট জনপ্রিয়। - আপনি যদি একটি নতুন পোস্ট যুক্ত করেন বা একটি জনপ্রিয় পোস্ট মুছে ফেলেন, তাহলে
popular_postsক্যাশ ক্লিয়ার হবে এবং পুনরায় জনপ্রিয় পোস্টগুলো ক্যাশ করা হবে। - এর ফলে, আপনার সাইটের অন্যান্য অংশের ক্যাশ অক্ষুণ্ণ থাকবে, যা সাইটের পারফরম্যান্স উন্নত করতে সহায়তা করবে।
ধাপ ৬: সাইটটি চালু করা
সবকিছু সঠিকভাবে সেট আপ করার পর, রাহুল তার Django সার্ভার চালু করে:
python manage.py runserver
এখন সে সাইটে গিয়ে popular-posts/ URL-এ ক্লিক করে দেখল যে, জনপ্রিয় পোস্টগুলো ক্যাশ থেকে দ্রুত লোড হচ্ছে। তার ব্যবহারকারীরা এখন দ্রুত তথ্য পেয়ে খুশি।
গল্পের শেষ
রাহুল বুঝতে পারল যে, ক্যাশিং কিভাবে তার সাইটের পারফরম্যান্স উন্নত করেছে। এখন সে নতুন পোস্ট যুক্ত করলে পুরানো ক্যাশ ক্লিয়ার হয় এবং তার পাঠকরা সব সময় আপডেট তথ্য পায়। সে এত খুশি যে, সে এখন ব্লগের অন্যান্য অংশেও ক্যাশিং যুক্ত করার পরিকল্পনা করছে।