Cliente Redis para Kotlin: Lettuce y Kreds — comparación y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente Redis para Kotlin: reseña y comparación de bibliotecas populares



Redis es un almacén de datos de tipo «clave-valor» de alto rendimiento, ampliamente utilizado para almacenamiento en caché, sesiones, colas y aplicaciones en tiempo real. Para el lenguaje Kotlin existen varios clientes maduros que permiten interactuar eficientemente con Redis. En este artículo revisaremos dos bibliotecas principales: Lettuce (asíncrono, no bloqueante) y Kreds (especializado para Kotlin con soporte de corrutinas).



1. Lettuce — un cliente potente y flexible para JVM



Lettuce es un cliente Redis asíncrono en Java que funciona muy bien en proyectos Kotlin. Soporta API síncrona, asíncrona (basada en CompletableFuture) y reactiva (Project Reactor / RxJava). Lettuce es una de las soluciones más populares para Spring Boot y microservicios.



Conexión (Gradle)

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


Ejemplo de conexión y operaciones síncronas

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()

// Establecer y obtener un valor commands.set("mykey", "¡Hola desde Lettuce!") val value = commands.get("mykey") println("Valor: $value") // ¡Hola desde Lettuce!

// Trabajar con hashes commands.hset("user:1", "name", "Alice") commands.hset("user:1", "age", "30") val name = commands.hget("user:1", "name") println("Nombre de usuario: $name")

connection.close() client.shutdown()}


Modo asíncrono con corrutinas

Lettuce soporta API asíncrona a través de CompletableFuture, que se adapta fácilmente a las corrutinas de Kotlin usando 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("Resultado del set: $result")

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

connection.close() client.shutdown()}


2. Kreds — cliente Kotlin-first con corrutinas



Kreds es un cliente Redis moderno, escrito completamente en Kotlin. Soporta de forma nativa corrutinas, Flow y serialización a través de kotlinx.serialization. Kreds utiliza Netty internamente, pero proporciona una API Kotlin limpia.



Conexión (Gradle)

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


Ejemplo de uso básico

import io.kreds.client.RedisClient

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

client.set("kreds-key", "¡Hola desde Kreds!") val value = client.get("kreds-key") println("Valor: $value")

// Trabajar con listas client.lpush("mylist", "A", "B", "C") val item = client.rpop("mylist") println("Extraído: $item")

client.close()}


Uso de Flow para suscripción a canales

Kreds soporta Pub/Sub a través de Kotlin Flow, lo cual es conveniente para aplicaciones reactivas:

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

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

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


3. Comparación entre Lettuce y Kreds



Recommendations

Característica