Caffeine في Java: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

Caffeine في Java: تخزين مؤقت عالي الأداء في الذاكرة

ما هي Caffeine ولماذا تحتاجها؟

Caffeine هي مكتبة عالية الأداء للتخزين المؤقت في الذاكرة، مكتوبة بلغة Java. طورها بن مانيس (Ben Manes) وتعتبر من أسرع تطبيقات الكاش للـ JVM. صُممت Caffeine لتلبية المتطلبات الحديثة للمعالجة المتعددة الخيوط وتوفر واجهة برمجة تطبيقات (API) غنية لإدارة دورة حياة العناصر في الكاش.

لماذا تحتاج Caffeine؟ في أي تطبيق يتعامل مع البيانات، غالبًا ما تطلب نفس البيانات بشكل متكرر. بدلاً من تنفيذ عملية مكلفة في كل مرة (استعلام قاعدة بيانات، استدعاء API خارجي، حسابات معقدة)، يمكنك حفظ النتيجة في الكاش. تقوم Caffeine بذلك بكفاءة قصوى باستخدام خوارزمية W-TinyLFU (Window Tiny Least Frequently Used)، والتي توفر دقة عالية في إزالة العناصر وأقل تكاليف إضافية.

تُستخدم المكتبة بنشاط في مشاريع كبيرة مثل Spring Framework (منذ الإصدار 5.0)، حيث تعتبر التطبيق القياسي للكاش. تدعم Caffeine التحميل غير المتزامن، التحديث التلقائي للسجلات، الإحصائيات، والعديد من استراتيجيات الإزالة (حسب الوقت، الحجم، المراجع).

التثبيت

يتم توزيع Caffeine عبر Maven Central. للاستخدام، أضف التبعية إلى ملف pom.xml (Maven) أو build.gradle (Gradle).

Maven

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.1.8</version>
</dependency>

Gradle

implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'

للحصول على أحدث إصدار، تحقق من Maven Central.

بداية سريعة

مثال بسيط لإنشاء واستخدام كاش Caffeine:

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;

import java.util.concurrent.TimeUnit;

public class QuickStart {
    public static void main(String[] args) {
        // 1. إنشاء كاش بحجم أقصى 100 عنصر
        //    ومدة صلاحية 10 دقائق بعد آخر وصول
        Cache<String, String> cache = Caffeine.newBuilder()
                .maximumSize(100)
                .expireAfterAccess(10, TimeUnit.MINUTES)
                .build();

        // 2. إضافة قيمة
        cache.put("key1", "مرحبًا، Caffeine!");

        // 3. الحصول على القيمة
        String value = cache.getIfPresent("key1");
        System.out.println(value); // سيظهر: مرحبًا، Caffeine!

        // 4. الحصول على القيمة مع دالة تحميل (إذا لم يكن المفتاح موجودًا)
        String loadedValue = cache.get("key2", k -> "تم التحميل: " + k);
        System.out.println(loadedValue); // سيظهر: تم التحميل: key2
    }
}

الطرق والفئات الأساسية

دعنا نستعرض الفئات والطرق الرئيسية في Caffeine. الفئة الأساسية للتكوين هي Caffeine، وللعمل مع الكاش نستخدم Cache و LoadingCache و AsyncCache.

1. Caffeine.newBuilder()

التوقيع: public static Caffeine<K, V> newBuilder()

الوظيفة: إنشاء باني جديد لتكوين الكاش. يتيح لك ضبط جميع المعاملات

توصيات