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

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

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

ابدأ الدورة

عميل Redis لجافا: Jedis وLettuce وRedisson — دليل مفصل



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



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



Jedis هو عميل بسيط وغير آمن للخيوط، مثالي للمشاريع البسيطة والتطبيقات المتجانسة. يوفر وصولاً مباشراً لأوامر Redis عبر واجهة برمجة تطبيقات بسيطة. لا يدعم Jedis الاستدعاءات غير المتزامنة "خارج الصندوق"، لكنه يعوض ذلك بسهولة الاستخدام.



إضافة التبعية (Maven)

<dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>5.1.0</version></dependency>


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

import redis.clients.jedis.Jedis;

public class JedisExample { public static void main(String[] args) { // الاتصال بـ Redis (افتراضياً localhost:6379) try (Jedis jedis = new Jedis("localhost", 6379)) { // المصادقة (إذا تم تعيين كلمة مرور) // jedis.auth("password");

// تعيين قيمة jedis.set("user:100", "Alice"); // الحصول على قيمة String user = jedis.get("user:100"); System.out.println("User: " + user); // User: Alice

// العمل مع التجزئات (Hashes) jedis.hset("user:200", "name", "Bob"); jedis.hset("user:200", "age", "30"); String name = jedis.hget("user:200", "name"); System.out.println("Name: " + name); // Name: Bob

// تعيين TTL (مدة حياة المفتاح) jedis.expire("user:100", 60); // المفتاح يعيش لمدة 60 ثانية } }}


إيجابيات وسلبيات Jedis

  • الإيجابيات: حد أدنى للدخول، وزن خفيف، دعم كامل لأوامر Redis.
  • السلبيات: غير آمن للخيوط (يحتاج إلى مجموعة اتصالات)، لا يوجد واجهة برمجة تطبيقات غير متزامنة، لا يوجد دعم مدمج لهياكل البيانات الموزعة.


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



Lettuce هو عميل Redis حديث وآمن للخيوط، مبني على Netty. يدعم البرمجة المتزامنة وغير المتزامنة والتفاعلية (Reactive Streams). Lettuce مثالي للتطبيقات عالية التحميل وغير المتزامنة على Java 8+.



إضافة التبعية (Maven)

<dependency>    <groupId>io.lettuce</groupId>    <artifactId>lettuce-core</artifactId>    <version>6.3.1.RELEASE</version></dependency>


مثال: اتصال غير متزامن

import io.lettuce.core.RedisClient;import io.lettuce.core.api.StatefulRedisConnection;import io.lettuce.core.api.async.RedisAsyncCommands;

import java.util.concurrent.CompletableFuture;

public class LettuceAsyncExample { public static void main(String[] args) { // إنشاء عميل RedisClient redisClient = RedisClient.create("redis://localhost:6379"); // فتح اتصال try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> async = connection.async(); // تعيين قيمة بشكل غير متزامن CompletableFuture<String> setFuture = async.set("key:1", "Hello from Lettuce!").toCompletableFuture(); // الحصول على قيمة بشكل غير متزامن

توصيات