Redis: النشر/الاشتراك في Redis

النشر/الاشتراك (Pub/Sub) هو نمط اتصال للرسائل. يغطي هذا الدرس وظيفة النشر/الاشتراك في Redis.

1. ما هو النشر/الاشتراك؟

يتكون نمط النشر/الاشتراك من:

BASH
الناشر → قناة → مشترك 1
               → مشترك 2
               → مشترك 3

2. الأوامر الأساسية

(1) SUBSCRIBE: الاشتراك في قناة

REDIS
# الاشتراك في قناة واحدة
SUBSCRIBE channel1

# الاشتراك في قنوات متعددة
SUBSCRIBE channel1 channel2 channel3

بعد الاشتراك، يدخل العميل في حالة انتظار لاستقبال الرسائل.

(2) PUBLISH: نشر رسالة

REDIS
# نشر رسالة إلى قناة
PUBLISH channel1 "Hello, Redis!"
(integer) 2  # يُرجع عدد المشتركين الذين استلموا الرسالة

(3) UNSUBSCRIBE: إلغاء الاشتراك

REDIS
# إلغاء الاشتراك من جميع القنوات
UNSUBSCRIBE

# إلغاء الاشتراك من قناة محددة
UNSUBSCRIBE channel1

3. الاشتراك بالنمط

(1) PSUBSCRIBE: اشتراك مطابق للنمط

REDIS
# الاشتراك في القنوات المطابقة لنمط
PSUBSCRIBE news.*  # الاشتراك في جميع القنوات التي تبدأ بـ news.

# مثال
PSUBSCRIBE user:*:notifications  # الاشتراك في جميع قنوات إشعارات المستخدمين

(2) PUNSUBSCRIBE: إلغاء الاشتراك بالنمط

REDIS
# إلغاء جميع اشتراكات الأنماط
PUNSUBSCRIBE

# إلغاء اشتراك نمط محدد
PUNSUBSCRIBE news.*

4. حالات الاستخدام

(1) دفع الرسائل الفوري

▶ مثال:إشعارات فورية

BASH
# الطرفية 1: الاشتراك في الإشعارات
SUBSCRIBE notifications

# الطرفية 2: نشر إشعار
PUBLISH notifications "New user registered"

(2) غرفة الدردشة

▶ مثال:غرفة الدردشة

BASH
# المستخدم 1: الاشتراك في غرفة الدردشة
SUBSCRIBE chatroom:general

# المستخدم 2: إرسال رسالة
PUBLISH chatroom:general "Hello everyone!"

(3) إشعارات النظام

▶ مثال:تنبيهات النظام

BASH
# المسؤول: الاشتراك في تنبيهات النظام
SUBSCRIBE system:alerts

# النظام: إرسال تنبيه
PUBLISH system:alerts "High CPU usage detected"

5. تنسيق الرسالة

تنسيق الرسالة الذي يستلمه المشتركون:

TEXT 📖 للعرض فقط
1) "message"           # نوع الرسالة
2) "channel1"          # اسم القناة
3) "Hello, Redis!"     # محتوى الرسالة

تنسيق رسالة الاشتراك بالنمط:

TEXT 📖 للعرض فقط
1) "pmessage"          # نوع الرسالة
2) "news.*"            # النمط المشترك
3) "news:sports"       # اسم القناة الفعلي
4) "Game result!"      # محتوى الرسالة

6. ملاحظات مهمة

⚠️ الرسائل غير محفوظة: رسائل النشر/الاشتراك غير مخزنة. المشتركون يستلمون فقط الرسائل المرسلة بعد اشتراكهم.

⚠️ فقدان الرسائل: إذا انقطع اتصال مشترك، تُفقد الرسائل المرسلة خلال تلك الفترة.

💡 بديل: عندما تكون هناك حاجة لحفظ الرسائل، استخدم Redis Streams أو القوائم لقوائم انتظار الرسائل.


7. Redis Stream (موصى به)

تم تقديم Streams في Redis 5.0، وهو حل أفضل لقوائم انتظار الرسائل:

REDIS
# إضافة رسالة
XADD mystream * name "Alice" action "login"
"1638361451780-0"

# قراءة الرسائل
XREAD COUNT 1 STREAMS mystream 0

# مجموعات المستهلكين
XGROUP CREATE mystream mygroup 0
XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >

(1) Stream مقابل Pub/Sub

الميزة Pub/Sub Stream
حفظ الرسائل ❌ غير محفوظة ✅ محفوظة
تأكيد الرسائل ❌ لا يوجد ACK ✅ ACK مدعوم
مجموعات المستهلكين ❌ غير مدعومة ✅ مدعومة
الرسائل التاريخية ❌ لا يمكن استرجاعها ✅ قابلة للاستعلام
حالة الاستخدام إشعارات فورية قوائم انتظار رسائل

❓ أسئلة شائعة

س هل يتم تخزين رسائل Pub/Sub؟
ج لا. Pub/Sub هو "أطلق وانسَ" — الرسائل غير محفوظة。
س هل يمكن لمشترك منقطع الاتصال استلام الرسائل التاريخية؟
ج لا. استخدم Streams أو القوائم لحفظ الرسائل。
س كم عدد المشتركين الذين يمكن أن تستوعبهم قناة؟
ج نظريًا غير محدود — يعتمد على أداء الخادم。

📖 ملخص

📝 تمارين

  1. تمرين الاشتراك: استخدم طرفيتين — أحدهما يشترك والآخر ينشر
  2. الاشتراك بالنمط: استخدم PSUBSCRIBE للاشتراك في قنوات متعددة متطابقة
  3. تمرين Stream: استخدم XADD/XREAD لتنفيذ قائمة انتظار رسائل بسيطة

8. الدرس التالي

في الدرس التالي، سنتعلم معاملات Redis، والتي تغطي استخدام المعاملات والتحذيرات.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%