استخدامات Redis: التخزين المؤقت، الطوابير، وتحديد المعدل

Backend2026-10-04TryQuickToolBox

لقد قمت ببناء تطبيق ويب يكتسب زخماً، ولكن الآن كل تحميل صفحة يضرب قاعدة البيانات، والمهام الخلفية تتراكم، وبعض المستخدمين يضغطون على واجهة برمجة التطبيقات الخاصة بك. تحتاج إلى مخزن بيانات سريع في الذاكرة للتعامل مع هذه التحديات. Redis هو الحل الأمثل للتخزين المؤقت، والطوابير، وتحديد المعدل. في هذه المقالة، سنستكشف هذه الاستخدامات الثلاثة الأساسية مع أمثلة عملية وأفضل الممارسات.

لماذا Redis للتخزين المؤقت والطوابير وتحديد المعدل؟

Redis هو مخزن مفتاح-قيمة في الذاكرة معروف بسرعته وتعدد استخداماته. يدعم هياكل بيانات غنية مثل السلاسل، والقوائم، والمجموعات، والمجموعات المرتبة، والتجزئات، مما يجعله مثالياً لمهام متنوعة. عملياته الذرية وقدرات النشر/الاشتراك تزيد من فائدته. سواء كنت تقلل حمل قاعدة البيانات، أو تفصل الخدمات، أو تحمي واجهات برمجة التطبيقات، يقدم Redis مجموعة أدوات بسيطة لكنها قوية.

1. التخزين المؤقت باستخدام Redis

التخزين المؤقت هو الاستخدام الأكثر شيوعاً لـ Redis. من خلال تخزين البيانات التي يتم الوصول إليها بشكل متكرر في الذاكرة، تقلل زمن الاستجابة وحمل قاعدة البيانات. ميزة TTL (الوقت حتى انتهاء الصلاحية) في Redis تنتهي صلاحية البيانات القديمة تلقائياً.

كيفية تنفيذ التخزين المؤقت

  1. تحقق من ذاكرة التخزين المؤقت: قبل الاستعلام من قاعدة البيانات، تحقق مما إذا كانت البيانات موجودة في Redis.
  2. عند فقدان ذاكرة التخزين المؤقت: اجلب من قاعدة البيانات وخزن النتيجة في Redis مع وقت انتهاء الصلاحية.
  3. عند إصابة ذاكرة التخزين المؤقت: أعد البيانات المخزنة مؤقتاً مباشرة.

إليك مثالاً بلغة Python باستخدام redis-py:

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)
    # Simulate DB fetch
    user = fetch_user_from_db(user_id)
    r.setex(cache_key, 3600, json.dumps(user))  # Cache for 1 hour
    return user

أفضل الممارسات للتخزين المؤقت

2. الطوابير باستخدام Redis

تمكّن قوائم Redis والمجموعات المرتبة طوابير رسائل بسيطة لكنها قوية. إنها مثالية للمهام الخلفية، وطوابير المهام، ومعالجة الأحداث. على عكس وسطاء الرسائل المخصصين، طوابير Redis خفيفة الوزن وسهلة الإعداد.

تنفيذ طابور أساسي

استخدم LPUSH لإضافة المهام و BRPOP لاستهلاكها بطريقة حظر:

# Producer
r.lpush('job_queue', json.dumps({'task': 'send_email', 'to': 'user@example.com'}))

# Consumer
while True:
    _, job = r.brpop('job_queue', timeout=30)
    if job:
        process_job(json.loads(job))

طوابير متقدمة باستخدام المجموعات المرتبة

للمهام المؤجلة أو طوابير الأولوية، استخدم المجموعات المرتبة مع الطوابع الزمنية كعلامات. يجلب المستهلكون المهام مع العلامات