عميل Redis لـ TypeScript: ioredis و redis
Redis هو مخزن بيانات عالي الأداء في الذاكرة، يُستخدم غالبًا للتخزين المؤقت، وإدارة الجلسات، وقوائم انتظار الرسائل، والتطبيقات في الوقت الفعلي. عند التطوير باستخدام TypeScript (خاصة في بيئة Node.js)، ستحتاج إلى عميل موثوق للتفاعل مع Redis. حاليًا، المرشحان الرئيسيان هما مكتبة redis (الرسمية من Redis) و ioredis (البديل الشائع من طرف ثالث). كلاهما يدعم TypeScript بشكل مباشر، لكنهما يختلفان في واجهة API والأداء والوظائف الإضافية.
1. مكتبة ioredis
ioredis هو عميل Redis كامل الميزات لـ Node.js، مكتوب بلغة TypeScript. يُعتبر المعيار الفعلي في المجتمع نظرًا لموثوقيته، ودعمه للعناقيد (Clusters) و Sentinel، والإمكانيات المدمجة للعمل مع تدفقات البيانات.
التثبيت
npm install ioredis# أوyarn add ioredisالاتصال ومثال أساسي
import Redis from 'ioredis';
const redis = new Redis({ host: 'localhost', port: 6379, // password: 'your-password', // إذا لزم الأمر retryStrategy: (times) => { // استراتيجية إعادة الاتصال return Math.min(times * 50, 2000); }});
redis.on('connect', () => { console.log('تم الاتصال بـ Redis');});
redis.on('error', (err) => { console.error('خطأ Redis:', err);});
// استخدام async/awaitasync function demo() { await redis.set('user:1', JSON.stringify({ name: 'إيفان', age: 30 })); const user = await redis.get('user:1'); console.log('البيانات المستلمة:', JSON.parse(user));}
demo();ميزات ioredis
- دعم كامل لـ TypeScript — جميع الطرق لها تصنيف صارم، مما يسمح لبيئة التطوير (IDE) باقتراح أنواع الوسائط والنتائج.
- العناقيد و Sentinel — دعم مدمج لوضع العنقود (Cluster) في Redis والتبديل التلقائي عند الأعطال.
- معالجة التدفقات — واجهة مريحة لـ Redis Streams (XADD, XREAD, XGROUP).
- القنوات (Pub/Sub) — اشتراك بسيط في القنوات واستقبال الرسائل في الوقت الفعلي.
- خط الأنابيب (Pipeline) والمعاملات — تجميع الأوامر لتحسين الأداء.
- إعادة الاتصال التلقائي — استراتيجية مدمجة للمحاولات المتكررة.
مثال مع Pipeline
import Redis from 'ioredis';
const redis = new Redis();
async function pipelineDemo() { const pipeline = redis.pipeline(); pipeline.set('key1', 'value1'); pipeline.set('key2', 'value2'); pipeline.get('key1'); pipeline.get('key2');
const results = await pipeline.exec(); console.log('نتائج pipeline:', results); // [ [ null, 'OK' ], [ null, 'OK' ], [ null, 'value1' ], [ null, 'value2' ] ]}
pipelineDemo();2. المكتبة الرسمية redis
بدءًا من الإصدار 4.x، تمت إعادة كتابة العميل الرسمي redis بالكامل باستخدام TypeScript. يقدم واجهة API حديثة تعتمد على Promise، وهندسة معيارية، وتكاملًا عميقًا مع TypeScript.
التثبيت
npm install redis# أوyarn add redisالاتصال ومثال
import { createClient } from 'redis';
const client = createClient({ url: 'redis://localhost:6379' // أو بكلمة مرور: 'redis://user:password@localhost:6379'});
client.on('error', (err) => console.error('خطأ عميل Redis', err));
async function connectAndUse() { await client.connect(); console.log('تم الاتصال!');
await client.set('session:123', 'active'); const status = await client.get('session:123'); console.log('حالة الجلسة:', status); // 'active'
await client.disconnect();}
connectAndUse();