عميل Redis لـ TypeScript: ioredis و redis

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

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

ابدأ الدورة

عميل 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();

توصيات