التخزين المؤقت في Rust: مكتبة `cached`

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

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

ابدأ الدورة
```html

ما هو `cached` ولماذا هو مطلوب؟

مكتبة cached هي أداة قوية ومرنة لتخزين نتائج استدعاءات الدوال في Rust مؤقتًا. تتيح لك تسريع تنفيذ البرامج بشكل كبير، وتجنب إعادة الحساب للعمليات المكلفة (مثل الاستعلامات من قاعدة البيانات، والحسابات على كميات كبيرة من البيانات، واستدعاءات API الخارجية). التخزين المؤقت مفيد بشكل خاص في خوادم الويب، ومحركات الألعاب، والأنظمة التحليلية، وأي تطبيقات يتم فيها طلب نفس البيانات بشكل متكرر.

التثبيت

أضف التبعية إلى ملف Cargo.toml الخاص بك:

[dependencies]cached = "0.48"

بعد ذلك، قم بتنفيذ cargo build — المكتبة جاهزة للاستخدام.

الوظائف الأساسية

  • تخزين الدوال مؤقتًا — حفظ تلقائي لنتائج استدعاء دالة بناءً على وسيطاتها.
  • TTL (Time To Live) — يتم تحديد عمر للذاكرة المؤقتة، وبعدها يتم حذف البيانات تلقائيًا.
  • الحجم الأقصى للذاكرة المؤقتة — تحديد عدد السجلات المخزنة (باستخدام استراتيجية LRU).
  • دعم العمليات غير المتزامنة — العمل مع الدوال غير المتزامنة (async) عبر cached::async.
  • مخازن البيانات — دعم مدمج لـ Redis و Memcached وذاكرة التخزين المؤقتة للملفات والتخزين في الذاكرة (in-memory).

مثال على كود Rust

use cached::proc_macro::cached;use std::time::Duration;

// نخزن الدالة مؤقتًا مع TTL لمدة 60 ثانية وبحد أقصى 10 سجلات#[cached( time = 60, size = 10, key = "u32", convert = r#"{ _input }"#)]fn expensive_computation(input: u32) -> String { println!("نحسب لـ {}", input); std::thread::sleep(Duration::from_secs(2)); format!("النتيجة لـ {}", input)}

fn main() { // الاستدعاء الأول — حساب (ثانيتان) println!("{}", expensive_computation(42)); // الاستدعاء الثاني — إرجاع فوري من الذاكرة المؤقتة println!("{}", expensive_computation(42));}

عند الاستدعاء الأول لـ expensive_computation(42)، سيتم تنفيذ الدالة (تأخير لمدة ثانيتين)، وعند الاستدعاء المتكرر، سيتم أخذ النتيجة من الذاكرة المؤقتة فورًا.

متى تستخدم

مكتبة cached مثالية من أجل:

  • تسريع الدوال التي يتم استدعاؤها بشكل متكرر مع وسيطات غير متغيرة.
  • تقليل الحمل على قواعد البيانات أو الخدمات الخارجية.
  • تنفيذ المذكرة (Memoization) في الخوارزميات العودية (مثل أرقام فيبوناتشي).
  • إنشاء طبقات وكيل للتخزين المؤقت في واجهات API.

تجنب التخزين المؤقت إذا كانت البيانات تتغير بشكل متكرر أو كانت النتيجة تعتمد على حالة خارجية (الوقت، العشوائية).

الخلاصة

cached هي مكتبة بسيطة ولكنها قوية، تحل 90% من مهام التخزين المؤقت في Rust. بفضل الماكرو (macros)، لا تتطلب كودًا نموذجيًا (boilerplate) وتتكامل بسهولة مع أي مشروع. قم بتثبيتها اليوم واستمتع بزيادة الأداء!

```

توصيات