⏱️2 min read · 335 words

ريديسهو مخزن البيانات في الذاكرة الأكثر استخدامًا على نطاق واسع في عام 2026. إن عمليات القراءة التي تبلغ أقل من مللي ثانية والرسائل العامة/الفرعية والعمليات الذرية تجعله ضروريًا للتخزين المؤقت وتخزين الجلسة وتحديد المعدل ولوحات المتصدرين في الوقت الفعلي. يغطي هذا البرنامج التعليمي Redis من التثبيت إلى أنماط الإنتاج.
📋 Table of Contents
تثبيت ريديس
# 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 إلى أي واجهة خلفية للتخزين المؤقت الفوري وتحديد المعدل وتخزين الجلسة والميزات في الوقت الفعلي. العمليات التي تقل عن المللي ثانية بملايين الطلبات في الثانية تجعلها غير قابلة للاستبدال في البنى الحديثة.
🔗 Share this article
✍️ Leave a Comment