রেডিস ব্যবহারের ক্ষেত্র: ক্যাশিং, কিউ এবং রেট লিমিটিং

Backend2026-10-13TryQuickToolBox

আপনি আপনার স্ট্যাকে রেডিস যোগ করেছেন, কিন্তু আপনি এটি শুধুমাত্র একটি সাধারণ কী-ভ্যালু স্টোর হিসেবে ব্যবহার করছেন। রেডিস শক্তিশালী ডেটা স্ট্রাকচার এবং কমান্ড অফার করে যা ক্যাশিং, কিউয়িং এবং রেট লিমিটিং সুন্দরভাবে সমাধান করতে পারে। এই গাইডটি দেখায় কিভাবে এই প্যাটার্নগুলি কার্যকরভাবে বাস্তবায়ন করবেন।

কেন এই ব্যবহারের ক্ষেত্রগুলির জন্য রেডিস?

রেডিস একটি ইন-মেমরি ডেটা স্টোর যা তার গতি এবং বহুমুখীতার জন্য পরিচিত। এটি স্ট্রিং, হ্যাশ, লিস্ট, সেট, সর্টেড সেট এবং আরও অনেক কিছু সমর্থন করে। এর পারমাণবিক অপারেশন এবং বিল্ট-ইন মেয়াদ শেষ হওয়া এটিকে ক্যাশিং, কিউ এবং রেট লিমিটিংয়ের জন্য আদর্শ করে তোলে। উপরন্তু, এটি যেকোনো ভাষার সাথে সংহত করা সহজ।

রেডিস দিয়ে ক্যাশিং

ক্যাশিং হল সবচেয়ে সাধারণ রেডিস ব্যবহারের ক্ষেত্র। আপনি ডেটাবেস লোড কমাতে এবং প্রতিক্রিয়া দ্রুত করতে ঘন ঘন অ্যাক্সেস করা ডেটা রেডিসে সংরক্ষণ করেন।

বেসিক ক্যাশ-অ্যাসাইড প্যাটার্ন

ক্যাশ-অ্যাসাইড প্যাটার্নে, আপনার অ্যাপ্লিকেশন প্রথমে রেডিস চেক করে। যদি ডেটা সেখানে না থাকে (ক্যাশ মিস), এটি ডেটাবেস থেকে আনয়ন করে, তারপর পরের বারের জন্য রেডিসে সংরক্ষণ করে।

import redis
import json

r = redis.Redis(host='localhost', port=6379, db=0)

def get_user(user_id):
    cache_key = f'user:{user_id}'
    cached = r.get(cache_key)
    if cached:
        return json.loads(cached)
    user = fetch_user_from_db(user_id)  # আপনার ডিবি কল
    r.setex(cache_key, 3600, json.dumps(user))  # ১ ঘন্টার জন্য ক্যাশ
    return user

সেরা অনুশীলন:

উন্নত ক্যাশিং প্যাটার্ন

উচ্চ-ট্রাফিক অ্যাপ্লিকেশনের জন্য, এই প্যাটার্নগুলি বিবেচনা করুন:

রেডিস দিয়ে কিউ

রেডিস লিস্ট এবং স্ট্রিমগুলি সাধারণ বার্তা কিউ তৈরি করার জন্য নিখুঁত। মৌলিক কাজের কিউয়ের জন্য লিস্ট এবং আরও জটিল ইভেন্ট প্রসেসিংয়ের জন্য স্ট্রিম ব্যবহার করুন।

লিস্ট দিয়ে সাধারণ জব কিউ

কাজ যোগ করতে LPUSH এবং সেগুলি প্রক্রিয়া করতে BRPOP ব্যবহার করুন। BRPOP একটি কাজ উপলব্ধ না হওয়া পর্যন্ত ব্লক করে, যা কর্মীদের জন্য এটি দক্ষ করে তোলে।

# প্রোডিউসার
r.lpush('jobs', json.dumps({'task': 'send_email', 'to': 'user@example.com'}))

# কনজিউমার (ওয়ার্কার)
while True:
    _, job_data = r.brpop('jobs', timeout=30)
    job = json.loads(job_data)
    process_job(job)

সেরা অনুশীলন:

ইভেন্ট সোর্সিংয়ের জন্য রেডিস স্ট্রিম

রেডিস স্ট্রিম (রেডিস 5.0 এ প্রবর্তিত) কনজিউমার গ্রুপ, স্বীকৃতি এবং রিপ্লে সহ আরও শক্তিশালী কিউ প্রদান করে। ইভেন্ট যোগ করতে XADD এবং সেগুলি ব্যবহার করতে XREADGROUP ব্যবহার করুন।

# ইভেন্ট যোগ করুন
r.xadd('events', {'type': 'order_placed', 'order_id': '123'})

# কনজিউমার গ্রুপ
r.xgroup_create('events', 'order_processors', id='0', mkstream=True)
while True:
    events = r.xreadgroup('order_processors', 'worker1', {'events': '>'}, count=10, block=5000)
    for event in events:
        process_event(event)
        r.xack('events', 'order_processors', event.id)

রেডিস দিয়ে রেট লিমিটিং

রেট লিমিটিং আপনার API গুলিকে অপব্যবহার থেকে রক্ষা করে এবং ন্যায্য ব্যবহার নিশ্চিত করে। রেডিসের পারমাণবিক অপারেশনগুলি অনুরোধ গণনার জন্য এটি আদর্শ করে তোলে।

ফিক্সড উইন্ডো রেট লিমিটিং

প্রতিটি ব্যবহারকারীর জন্য একটি কাউন্টার বাড়ান এবং একটি মেয়াদ শেষ হওয়ার সময় সেট করুন। যদি গণনা সীমা ছাড়িয়ে যায়, অনুরোধটি ব্লক করুন।

def is_allowed(user_id, limit=100, window=60):
    key = f'rate_limit:{user_id}'
    current = r.incr(key)
    if current == 1:
        r.expire(key, window)
    return current