عميل 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
| الخاصية |
|---|