ما هو node-cache ولماذا هو مطلوب؟
مكتبة node-cache هي نظام تخزين مؤقت بسيط وسريع لـ Node.js، مكتوبة بلغة TypeScript. تسمح بتخزين البيانات في الذاكرة (in-memory cache)، مما يسرع بشكل كبير الوصول إلى المعلومات المطلوبة بشكل متكرر (مثل نتائج استعلامات قاعدة البيانات، استجابات API، العمليات الحسابية). في TypeScript، توفر node-cache كتابة صارمة للأنواع (strict typing)، مما يجعل الكود أكثر قابلية للتنبؤ وأمانًا.
التخزين المؤقت ضروري لتقليل الحمل على الخادم، وتقليل وقت الاستجابة، وتوفير الموارد في العمليات المتكررة. تعتبر Node-cache مثالية للمشاريع الصغيرة والمتوسطة التي لا تتطلب تخزينًا مؤقتًا موزعًا (مثل Redis)، ولكنها تحتاج إلى ذاكرة تخزين مؤقت خفيفة الوزن في الذاكرة.
التثبيت
قم بتثبيت الحزمة عبر npm أو yarn:
npm install node-cache
# أو
yarn add node-cacheبالنسبة لـ TypeScript، الأنواع مضمنة بالفعل في الحزمة، ولا حاجة لتثبيت @types بشكل إضافي.
الوظائف الأساسية
- set(key, value, ttl) — يحفظ قيمة بمفتاح مع وقت حياة اختياري (TTL) بالثواني.
- get(key) — يحصل على القيمة حسب المفتاح. يُرجع undefined إذا كان المفتاح غير موجود أو منتهي الصلاحية.
- del(key) — يحذف مفتاحًا واحدًا أو أكثر.
- has(key) — يتحقق من وجود المفتاح في ذاكرة التخزين المؤقت.
- flushAll() — يمسح ذاكرة التخزين المؤقت بالكامل.
- getStats() — يُرجع إحصائيات (عدد المفاتيح، الإصابات، الأخطاء).
مثال كود بلغة TypeScript
import NodeCache from 'node-cache';
// إنشاء نسخة من ذاكرة التخزين المؤقت مع TTL افتراضي 60 ثانية
const myCache = new NodeCache({ stdTTL: 60 });
// قيمة محددة النوع
interface User {
id: number;
name: string;
}
// حفظ البيانات
const user: User = { id: 1, name: 'Alice' };
myCache.set('user_1', user);
// الحصول على البيانات
const cachedUser = myCache.get<User>('user_1');
if (cachedUser) {
console.log(cachedUser.name); // Alice
} else {
console.log('ذاكرة التخزين المؤقت فارغة');
}
// التحقق من الوجود
console.log(myCache.has('user_1')); // true
// الحذف
myCache.del('user_1');
// مسح ذاكرة التخزين المؤقت بالكامل
myCache.flushAll();متى تستخدم node-cache
- البيانات المطلوبة بشكل متكرر: مثل قائمة الدول، أسعار العملات، الإعدادات.
- نتائج العمليات الحسابية الثقيلة: تخزين نتيجة عملية مكلفة لبضع ثوانٍ.
- بوابات API: تخزين استجابات API الخارجية مؤقتًا لتقليل التأخير والحدود.
- الجلسات: تخزين بيانات الجلسة مؤقتًا (إذا لم تكن هناك حاجة للاستمرارية).
تجنب استخدام node-cache إذا كنت بحاجة إلى تخزين مؤقت موزع بين عدة خوادم — في هذه الحالة، من الأفضل استخدام Redis. كما أنها غير مناسبة للكميات الكبيرة من البيانات (أكثر من 1-2 جيجابايت)، لأنها تُخزن في الذاكرة العاملة.
Node-cache هي خيار ممتاز لسيناريوهات التخزين المؤقت البسيطة في TypeScript، حيث تكون السرعة والحد الأدنى من التكوين مهمين.