عميل Redis لجافا: Jedis وLettuce وRedisson — نظرة عامة وأمثلة

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

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

ابدأ الدورة

عميل Redis لجافا: نظرة عامة على المكتبات الشائعة

\n\n

Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة"، يُستخدم على نطاق واسع للتخزين المؤقت، الجلسات، قوائم الانتظار، والتحليلات في الوقت الفعلي. للعمل مع Redis من جافا، توجد عدة مكتبات عميل ناضجة. في هذه المقالة، سنستعرض الثلاثة الأكثر شهرة: Jedis وLettuce وRedisson. لكل منها ميزاتها، مزاياها، وسيناريوهات استخدامها.

\n\n

1. Jedis — عميل بسيط وخفيف الوزن

\n\n

Jedis هو عميل متزامن (Synchronous) بسيط لـ Redis. سهل التعلم، ومناسب تمامًا للمشاريع الصغيرة والخدمات المصغرة التي لا تتطلب عدم التزامن (Asynchronous).

\n\n

ميزات Jedis:

\n
    \n
  • واجهة برمجة تطبيقات متزامنة (استدعاءات محظورة).
  • \n
  • دعم تجمع الاتصالات (JedisPool).
  • \n
  • دعم كامل لأوامر Redis.
  • \n
  • لا يدعم العمليات غير المتزامنة أو التفاعلية (Reactive).
  • \n
\n\n

مثال على الاتصال والعمليات الأساسية:

\n
import redis.clients.jedis.Jedis;\nimport redis.clients.jedis.JedisPool;\n\npublic class JedisExample {\n    public static void main(String[] args) {\n        // إنشاء تجمع اتصالات\n        try (JedisPool pool = new JedisPool("localhost", 6379);\n             Jedis jedis = pool.getResource()) {\n\n            // تعيين قيمة والحصول عليها\n            jedis.set("user:100", "Alice");\n            String value = jedis.get("user:100");\n            System.out.println("القيمة: " + value); // الإخراج: Alice\n\n            // العمل مع القوائم\n            jedis.lpush("queue", "task1");\n            jedis.lpush("queue", "task2");\n            String task = jedis.rpop("queue");\n            System.out.println("المهمة من قائمة الانتظار: " + task); // الإخراج: task1\n        }\n    }\n}
\n\n

متى تختار Jedis:

\n
    \n
  • مشروع بسيط بدون متطلبات تفاعلية (Reactive).
  • \n
  • الحاجة إلى أقل تبعية (ملف jar واحد).
  • \n
  • العمليات المحظورة التقليدية.
  • \n
\n\n

2. Lettuce — عميل غير متزامن وتفاعلي

\n\n

Lettuce هو عميل حديث مبني على Netty. يدعم واجهات برمجة تطبيقات متزامنة، غير متزامنة، وتفاعلية (Reactive Streams). مناسب تمامًا للأنظمة عالية التحميل.

\n\n

ميزات Lettuce:

\n
    \n
  • واجهة برمجة تطبيقات غير متزامنة وتفاعلية (مبنية على Project Reactor).
  • \n
  • دعم عناقيد Redis، Sentinel، SSL.
  • \n
  • عمليات غير محظورة — إنتاجية عالية.
  • \n
  • دعم Redis Pub/Sub، Streams، المعاملات (Transactions).
  • \n
\n\n

مثال على الاستخدام غير المتزامن:

\n
import io.lettuce.core.RedisClient;\nimport io.lettuce.core.api.StatefulRedisConnection;\nimport io.lettuce.core.api.async.RedisAsyncCommands;\n\npublic class LettuceAsyncExample {\n    public static void main(String[] args) {\n        RedisClient client = RedisClient.create("redis://localhost:6379");\n        try (StatefulRedisConnection<String, String> connection = client.connect()) {\n            RedisAsyncCommands<String, String> async = connection.async();\n\n            // تعيين قيمة بشكل غير متزامن\n            async.set("key:1", "Hello, Lettuce!");\n\n            // الحصول على قيمة بشكل غير متزامن مع رد اتصال (callback)\n            async.get("key:1").thenAccept(value -> \n                System.out.println("تم الاستلام: " + value)\n            );\n\n            // تأخير بسيط لإكمال العملية غير المتزامنة\n            try { Thread.sleep(100); } catch (InterruptedException e) { }\n        }\n        client.shutdown();\n    }\n}
\n\n

متى تختار Lettuce:

\n
    \n
  • الأنظمة عالية التحميل مع عدد كبير من الطلبات.
  • \n
  • الحاجة إلى عدم التزامن أو البرمجة التفاعلية.
  • \n
  • العمل مع عنقود Redis أو Sentinel.
  • \n
\n\n

3. Redisson — عميل بإمكانيات موسعة

\n\n

Redisson ليس مجرد عميل، بل هو إطار عمل متكامل (Framework)

توصيات