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}") }}