عميل Redis لـ Kotlin: Lettuce و Kreds — مقارنة وأمثلة

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

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

ابدأ الدورة

عميل Redis لـ Kotlin: نظرة عامة ومقارنة بين المكتبات الشائعة



Redis هو مخزن بيانات عالي الأداء من نوع "مفتاح-قيمة"، يُستخدم على نطاق واسع للتخزين المؤقت، الجلسات، قوائم الانتظار، وتطبيقات الوقت الفعلي. بالنسبة للغة Kotlin، هناك العديد من العملاء الناضجين الذين يسمحون بالتفاعل بكفاءة مع Redis. في هذه المقالة، سنستعرض مكتبتين رئيسيتين: Lettuce (غير متزامن، غير مانع) و Kreds (مخصص لـ Kotlin مع دعم الكوروتينات).



1. Lettuce — عميل قوي ومرن لـ JVM



Lettuce هو عميل Redis غير متزامن بلغة Java، يعمل بشكل ممتاز في مشاريع Kotlin. يدعم واجهات برمجة تطبيقات متزامنة، غير متزامنة (عبر CompletableFuture)، وتفاعلية (Project Reactor / RxJava). يُعتبر Lettuce أحد أكثر الحلول شيوعًا لـ Spring Boot والخدمات المصغرة.



الإضافة (Gradle)

dependencies {    implementation("io.lettuce:lettuce-core:6.3.2.RELEASE")}


مثال على الاتصال المتزامن والعمليات

import io.lettuce.core.RedisClientimport io.lettuce.core.api.sync.RedisCommands

fun main() { val client = RedisClient.create("redis://localhost:6379") val connection = client.connect() val commands: RedisCommands<String, String> = connection.sync()

// تعيين وجلب قيمة commands.set("mykey", "Hello from Lettuce!") val value = commands.get("mykey") println("Value: $value") // Hello from Lettuce!

// العمل مع التجزئات (Hashes) commands.hset("user:1", "name", "Alice") commands.hset("user:1", "age", "30") val name = commands.hget("user:1", "name") println("User name: $name")

connection.close() client.shutdown()}


الوضع غير المتزامن مع الكوروتينات

يدعم Lettuce واجهة برمجة تطبيقات غير متزامنة عبر CompletableFuture، والتي يمكن تكييفها بسهولة مع كوروتينات Kotlin باستخدام await():

import kotlinx.coroutines.runBlockingimport kotlinx.coroutines.future.await

fun main() = runBlocking { val client = RedisClient.create("redis://localhost:6379") val connection = client.connect() val asyncCommands = connection.async()

val result = asyncCommands.set("coroutine-key", "Kotlin + Lettuce").await() println("Set result: $result")

val value = asyncCommands.get("coroutine-key").await() println("Value: $value")

connection.close() client.shutdown()}


2. Kreds — عميل Kotlin-first مع الكوروتينات



Kreds هو عميل Redis حديث، مكتوب بالكامل بلغة Kotlin. يدعم بشكل أصلي الكوروتينات، Flow، والتسلسل عبر kotlinx.serialization. يستخدم Kreds Netty داخليًا، لكنه يوفر واجهة برمجة تطبيقات Kotlin نقية.



الإضافة (Gradle)

dependencies {    implementation("io.ktor:kreds:0.9.0")}


مثال على الاستخدام الأساسي

import io.kreds.client.RedisClient

suspend fun main() { val client = RedisClient("localhost", 6379)

client.set("kreds-key", "Hello from Kreds!") val value = client.get("kreds-key") println("Value: $value")

// العمل مع القوائم client.lpush("mylist", "A", "B", "C") val item = client.rpop("mylist") println("Popped: $item")

client.close()}


استخدام Flow للاشتراك في القنوات

يدعم Kreds Pub/Sub عبر Kotlin Flow، وهو مناسب للتطبيقات التفاعلية:

import io.kreds.client.RedisClientimport kotlinx.coroutines.flow.collect

suspend fun main() { val client = RedisClient("localhost", 6379)

client.subscribe("channel-1").collect { message -> println("Received: ${message.payload}") }}


3. مقارنة بين Lettuce و Kreds



توصيات

الخاصية