عميل Redis لـ Node.js: ioredis — دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

عميل Redis لـ JavaScript (Node.js) — ioredis

\n\n

Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة"، يُستخدم غالبًا للتخزين المؤقت، إدارة الجلسات، قوائم انتظار الرسائل، وأنظمة Pub/Sub. للعمل مع Redis من Node.js، توجد عدة مكتبات، لكن واحدة من أقوى وأشهرها هي ioredis. هذه المكتبة مصممة للتطبيقات الحديثة التي تتطلب أداءً عاليًا، ودعمًا للتجميع، والمعاملات، ومعالجة البيانات المتدفقة.

\n\n

ما هو ioredis؟

\n

ioredis هو عميل Redis كامل الوظائف لـ Node.js، مكتوب بلغة JavaScript. يدعم جميع إمكانيات Redis، بما في ذلك التجميع، أوضاع Sentinel، خطوط الأنابيب (pipelining)، المعاملات (MULTI/EXEC)، نصوص Lua، Pub/Sub، بالإضافة إلى العمل مع هياكل مشابهة لـ MapReduce. المكتبة قيد التطوير النشط وتُستخدم في الإنتاج من قبل العديد من الشركات.

\n\n

تثبيت ioredis

\n

يتم التثبيت عبر npm:

\n
npm install ioredis
\n

بعد التثبيت، يمكنك الاتصال بخادم Redis:

\n
const Redis = require('ioredis');\nconst redis = new Redis(); // افتراضيًا localhost:6379
\n\n

الإمكانيات الأساسية لـ ioredis

\n
    \n
  • سهولة الاستخدام — واجهة برمجة تطبيقات بديهية، تشبه أوامر Redis.
  • \n
  • دعم Promise و async/await — جميع العمليات غير المتزامنة تُرجع وعودًا (promises).
  • \n
  • التجميع (Clustering) — توزيع تلقائي للطلبات بين عقد المجموعة.
  • \n
  • Sentinel — التبديل التلقائي إلى الخادم الاحتياطي عند حدوث عطل.
  • \n
  • خطوط الأنابيب (Pipelining) — إرسال أوامر متعددة في طلب واحد لتحسين الأداء.
  • \n
  • Pub/Sub — الاشتراك في القنوات وتبادل الرسائل في الوقت الفعلي.
  • \n
  • دعم نصوص Lua — تنفيذ عمليات ذرية على جانب الخادم.
  • \n
  • المراقبة والأحداث — تتبع حالة الاتصال والأخطاء.
  • \n
\n\n

أمثلة على استخدام ioredis

\n\n

العمل الأساسي مع المفاتيح

\n

مثال على تعيين قيمة واسترجاعها:

\n
const Redis = require('ioredis');\nconst redis = new Redis();\n\nasync function basicExample() {\n    await redis.set('user:1', 'Alice');\n    const value = await redis.get('user:1');\n    console.log(value); // Alice\n}\nbasicExample();
\n\n

العمل مع التجزئة (Hashes)

\n

تسمح التجزئة بتخزين عدة حقول تحت مفتاح واحد:

\n
async function hashExample() {\n    await redis.hset('user:2', 'name', 'Bob', 'age', 30);\n    const name = await redis.hget('user:2', 'name');\n    console.log(name); // Bob\n}\nhashExample();
\n\n

خطوط الأنابيب (Pipelining)

\n

تعمل خطوط الأنابيب على تسريع تنفيذ الأوامر المتعددة بشكل كبير:

\n
async function pipelineExample() {\n    const pipeline = redis.pipeline();\n    pipeline.set('key1', 'value1');\n    pipeline.set('key2', 'value2');\n    pipeline.get('key1');\n    const results = await pipeline.exec();\n    console.log(results); // مصفوفة النتائج\n}\npipelineExample();
\n\n

Pub/Sub (ناشر-مشترك)

\n

مثال على الاشتراك في قناة وإرسال رسالة:

\n
const subscriber = new Redis();\nconst publisher = new Redis();\n\nsubscriber.subscribe('news', (err, count) => {\n    console.log(`مشترك في ${count} قناة(قنوات)`);\n});\n\nsubscriber.on('message', (channel, message) => {\n    console.log(`تم استلام رسالة من القناة ${channel}: ${message}`);\n});\n\n// نشر رسالة\nasync function publishMessage() {\n    await publisher.publish('news', 'مرحبًا بالعالم!');\n}\npublishMessage();
\n\n

العمل مع مجموعة Redis

\n

للاتصال بمجموعة، استخدم Redis.Cluster:

\n
const Redis =                    

توصيات