🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

برنامج Redis التعليمي 2026: التخزين المؤقت، Pub/Sub، التدفقات وأنماط الإنتاج

⏱️2 min read  ·  335 words
Redis Tutorial 2026: Caching, Pub/Sub, Streams and Production Patterns

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

تثبيت ريديس

# Ubuntu
sudo apt install redis-server
sudo systemctl enable redis-server

# macOS
brew install redis
brew services start redis

# Docker (simplest)
docker run -d --name redis -p 6379:6379 redis:7-alpine

# Connect
redis-cli ping  # PONG

أنواع البيانات الأساسية

# String
SET user:1:name 'Alice'
GET user:1:name         # Alice
SETEX session:abc 3600 'user_id=1'  # TTL 1 hour

# Hash (object)
HSET user:1 name Alice email alice@example.com age 30
HGET user:1 name        # Alice
HGETALL user:1          # all fields

# List
LPUSH queue:jobs 'job1' 'job2' 'job3'
RPOP queue:jobs         # job1 (queue behavior)
LRANGE queue:jobs 0 -1  # all items

# Set
SADD tags:post:1 python redis backend
SMEMBERS tags:post:1
SISMEMBER tags:post:1 python  # 1 = true

# Sorted Set (leaderboard)
ZADD leaderboard 1500 'Alice' 2200 'Bob' 1800 'Carol'
ZREVRANGE leaderboard 0 2 WITHSCORES  # top 3

ريديس مع بايثون

pip install redis

import redis

r = redis.Redis(host='localhost', port=6379, decode_responses=True)

# Cache pattern
def get_user(user_id: int) -> dict:
    key = f'user:{user_id}'
    cached = r.hgetall(key)
    if cached:
        return cached
    # Cache miss — fetch from DB
    user = db.get_user(user_id)  # your DB query
    r.hset(key, mapping=user)
    r.expire(key, 3600)  # 1 hour TTL
    return user

# Rate limiting
def rate_limit(ip: str, limit: int = 100) -> bool:
    key = f'rate:{ip}'
    count = r.incr(key)
    if count == 1:
        r.expire(key, 60)  # 60-second window
    return count <= limit

رسائل الحانة/الفرعية

import redis, threading

r = redis.Redis(decode_responses=True)

# Publisher
def publish_event(channel: str, data: str):
    r.publish(channel, data)

# Subscriber
def subscribe_events():
    pubsub = r.pubsub()
    pubsub.subscribe('events')
    for message in pubsub.listen():
        if message['type'] == 'message':
            print(f'Received: {message["data"]}')

# Run subscriber in background thread
t = threading.Thread(target=subscribe_events, daemon=True)
t.start()

publish_event('events', 'user_logged_in:123')

تدفقات Redis (قائمة الانتظار الحديثة)

# Produce
XADD events:orders * user_id 123 amount 49.99 item laptop

# Consume (consumer group)
XGROUP CREATE events:orders workers $ MKSTREAM
XREADGROUP GROUP workers consumer1 COUNT 10 STREAMS events:orders >

# Acknowledge
XACK events:orders workers <message-id>

نصائح الإنتاج

  • تعيينmaxmemoryوmaxmemory-policy allkeys-lruلمنع OOM
  • تمكين المثابرة معappendonly yes(AOF) لاستعادة الأعطال
  • استخدم تجمع الاتصالات (redis.ConnectionPool) في بايثون
  • بادئة كافة المفاتيح حسب الخدمة:auth:session:...,cache:user:...
  • مراقب معredis-cli info statsوredis-cli monitor

الخلاصة

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

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা