عميل Redis لـ JavaScript (Node.js) — ioredis
\n\nRedis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة"، يُستخدم غالبًا للتخزين المؤقت، إدارة الجلسات، قوائم انتظار الرسائل، وأنظمة Pub/Sub. للعمل مع Redis من Node.js، توجد عدة مكتبات، لكن واحدة من أقوى وأشهرها هي ioredis. هذه المكتبة مصممة للتطبيقات الحديثة التي تتطلب أداءً عاليًا، ودعمًا للتجميع، والمعاملات، ومعالجة البيانات المتدفقة.
\n\nما هو ioredis؟
\nioredis هو عميل Redis كامل الوظائف لـ Node.js، مكتوب بلغة JavaScript. يدعم جميع إمكانيات Redis، بما في ذلك التجميع، أوضاع Sentinel، خطوط الأنابيب (pipelining)، المعاملات (MULTI/EXEC)، نصوص Lua، Pub/Sub، بالإضافة إلى العمل مع هياكل مشابهة لـ MapReduce. المكتبة قيد التطوير النشط وتُستخدم في الإنتاج من قبل العديد من الشركات.
\n\nتثبيت ioredis
\nيتم التثبيت عبر npm:
\nnpm install ioredis\nبعد التثبيت، يمكنك الاتصال بخادم Redis:
\nconst 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
أمثلة على استخدام ioredis
\n\nالعمل الأساسي مع المفاتيح
\nمثال على تعيين قيمة واسترجاعها:
\nconst 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تسمح التجزئة بتخزين عدة حقول تحت مفتاح واحد:
\nasync 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تعمل خطوط الأنابيب على تسريع تنفيذ الأوامر المتعددة بشكل كبير:
\nasync 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\nPub/Sub (ناشر-مشترك)
\nمثال على الاشتراك في قناة وإرسال رسالة:
\nconst 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:
const Redis =