التخزين المؤقت في Java: Redis، Ehcache، Caffeine، Hazelcast — نظرة عامة وأمثلة

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

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

ابدأ الدورة

التخزين المؤقت في Java: Redis وحلول أخرى



التخزين المؤقت هو أحد التقنيات الأساسية لتحسين أداء تطبيقات Java. فهو يسمح بتقليل وقت الاستجابة، وتخفيف الحمل على قواعد البيانات، وخفض تكاليف البنية التحتية. في هذه المقالة، سنستعرض بالتفصيل المكتبات والأدوات الشائعة للتخزين المؤقت في Java: Redis، Ehcache، Caffeine و Hazelcast. ستتعرف على متى وأي أداة تختار، وسترى أيضًا أمثلة عملية على الكود.



لماذا نحتاج إلى التخزين المؤقت؟

بدون التخزين المؤقت، كل طلب للبيانات يؤدي إلى قراءة من مخزن بطيء (قاعدة بيانات، API خارجي). يقوم التخزين المؤقت بتخزين البيانات المطلوبة بشكل متكرر في ذاكرة سريعة (داخل العملية أو في الذاكرة)، مما يوفر:

  • تسريع الوصول بمقدار 10–100 مرة
  • تقليل الحمل على قاعدة البيانات
  • زيادة سعة النظام
  • توفير الموارد


1. Redis — تخزين مؤقت موزع

Redis هو مخزن بيانات في الذاكرة يعمل كخادم منفصل. وهو يدعم هياكل بيانات معقدة (سلاسل، قوائم، مجموعات، تجزئات) وآليات انتهاء صلاحية المفاتيح (TTL). بالنسبة لـ Java، يتم استخدام العميل Jedis أو Lettuce.



مثال على استخدام Redis مع Jedis

import redis.clients.jedis.Jedis;

public class RedisCacheExample { public static void main(String[] args) { try (Jedis jedis = new Jedis("localhost", 6379)) { // تعيين قيمة مع TTL لمدة 60 ثانية jedis.setex("user:123", 60, "{\\"name\\":\\"Alice\\",\\"role\\":\\"admin\\"}");

// قراءة القيمة String userData = jedis.get("user:123"); System.out.println("البيانات المخزنة مؤقتًا: " + userData);

// التحقق من وجود المفتاح System.out.println("المفتاح موجود: " + jedis.exists("user:123")); } }}


مزايا Redis:

  • دعم العنقودية والنسخ المتماثل
  • الاستمرارية (RDB، AOF)
  • مجموعة غنية من الأوامر (INCR، SORT، PUB/SUB)
  • تكامل ممتاز مع Spring Boot عبر spring-boot-starter-data-redis


العيوب:

  • تأخير الشبكة (عملية منفصلة)
  • يتطلب إدارة
  • غير مناسب للتخزين المؤقت بكميات صغيرة جدًا من البيانات (تكلفة الاتصال)


2. Ehcache — تخزين مؤقت ناضج داخل العملية

Ehcache هي واحدة من أقدم مكتبات التخزين المؤقت لـ Java. تعمل داخل JVM، وتدعم التخزين على القرص (BigMemory) والتوافق الكامل مع JCache (JSR-107). مثالية للتطبيقات المتجانسة.



مثال على إعداد Ehcache عبر XML

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns="http://www.ehcache.org/v3"        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.10.xsd">    <cache alias="users">        <key-type>java.lang.String</key-type>        <value-type>java.lang.String</value-type>        <heap>1000</heap>        <expiry>            <ttl unit="seconds">300</ttl>        </expiry>    </cache></config>


مثال على استخدام Ehcache في الكود

import org.ehcache.Cache;import org.ehcache.CacheManager;import org.ehcache.config.builders.CacheManagerBuilder;import org.ehcache.xml.XmlConfiguration;

public class EhcacheExample { public static void main(String[] args) { XmlConfiguration xmlConfig = new XmlConfiguration( EhcacheExample.class.getResource("/ehcache.xml")); try (CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig)) { cacheManager.init(); Cache<String, String> users = cacheManager.getCache("u

توصيات