Cliente Redis para Kotlin: visão geral e comparação de bibliotecas populares
Redis é um armazenamento de dados do tipo chave-valor de alto desempenho, amplamente utilizado para cache, sessões, filas e aplicações em tempo real. Para a linguagem Kotlin, existem vários clientes maduros que permitem interagir eficientemente com o Redis. Neste artigo, veremos duas bibliotecas principais: Lettuce (assíncrono, não bloqueante) e Kreds (especializado para Kotlin com suporte a corrotinas).
1. Lettuce — cliente poderoso e flexível para JVM
Lettuce é um cliente Redis assíncrono em Java que funciona perfeitamente em projetos Kotlin. Ele suporta API síncrona, assíncrona (via CompletableFuture) e reativa (Project Reactor / RxJava). Lettuce é uma das soluções mais populares para Spring Boot e microsserviços.
Conexão (Gradle)
dependencies { implementation("io.lettuce:lettuce-core:6.3.2.RELEASE")}Exemplo de conexão síncrona e operações
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()
// Definir e obter valor commands.set("mykey", "Olá do Lettuce!") val value = commands.get("mykey") println("Valor: $value") // Olá do Lettuce!
// Trabalhando com hashes commands.hset("user:1", "name", "Alice") commands.hset("user:1", "age", "30") val name = commands.hget("user:1", "name") println("Nome do usuário: $name")
connection.close() client.shutdown()}Modo assíncrono com corrotinas
Lettuce suporta API assíncrona via CompletableFuture, que pode ser facilmente adaptada para corrotinas 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 do set: $result")
val value = asyncCommands.get("coroutine-key").await() println("Valor: $value")
connection.close() client.shutdown()}2. Kreds — cliente Kotlin-first com corrotinas
Kreds é um cliente Redis moderno, escrito inteiramente em Kotlin. Ele suporta nativamente corrotinas, Flow e serialização via kotlinx.serialization. Kreds usa Netty internamente, mas fornece uma API Kotlin pura.
Conexão (Gradle)
dependencies { implementation("io.ktor:kreds:0.9.0")}Exemplo de uso básico
import io.kreds.client.RedisClient
suspend fun main() { val client = RedisClient("localhost", 6379)
client.set("kreds-key", "Olá do Kreds!") val value = client.get("kreds-key") println("Valor: $value")
// Trabalhando com listas client.lpush("mylist", "A", "B", "C") val item = client.rpop("mylist") println("Removido: $item")
client.close()}Usando Flow para inscrição em canais
Kreds suporta Pub/Sub via Kotlin Flow, o que é conveniente para aplicações reativas:
import io.kreds.client.RedisClientimport kotlinx.coroutines.flow.collect
suspend fun main() { val client = RedisClient("localhost", 6379)
client.subscribe("channel-1").collect { message -> println("Recebido: ${message.payload}") }}3. Comparação entre Lettuce e Kreds
| Característica |
|---|