Redis clients for Kotlin: Lettuce, Redisson and Kredis

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Redis clients for Kotlin: Lettuce, Redisson and Kredis



When developing modern applications in Kotlin, there is often a need for fast and reliable caching, session management, message queues, or implementing pub/sub. Redis, being a high-performance in-memory data store, is ideal for these tasks. However, to work effectively with Redis from Kotlin, you need to choose the right client library. In this article, we will look at three of the most popular and mature solutions: Lettuce, Redisson, and the native library Kredis. Each of them has its own features, advantages, and areas of application.



Why is choosing the right Redis client for Kotlin important?



Kotlin is a language that actively uses JVM capabilities, but also offers its own unique constructs: coroutines, extension functions, data classes, and null safety. A good Redis client should not just work with Redis, but also fit seamlessly into the Kotlin ecosystem, support asynchronous calls, coroutines, and reactive streams. The wrong choice can lead to thread blocking, complex code, and performance loss.



1. Lettuce — reactive and asynchronous Redis client



Lettuce is a powerful, scalable Redis client for Java that works great in Kotlin as well. Its main advantage is full support for asynchronous and reactive programming based on Project Reactor and RxJava. Lettuce uses Netty for non-blocking I/O, allowing it to handle thousands of connections in a single thread.



Features of Lettuce:

  • Support for synchronous, asynchronous, and reactive API
  • Automatic reconnection and error handling
  • Support for Redis Sentinel, Redis Cluster
  • SSL/TLS encryption
  • Support for Kotlin coroutines via adapters


Example of using Lettuce with Kotlin coroutines:

// build.gradle.ktsdependencies {    implementation("io.lettuce:lettuce-core:6.3.2.RELEASE")    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}

import io.lettuce.core.RedisClientimport io.lettuce.core.api.coroutines.RedisCoroutinesCommandsimport kotlinx.coroutines.runBlocking

suspend fun redisExample() { val client = RedisClient.create("redis://localhost:6379") val connection = client.connect() val commands: RedisCoroutinesCommands<String, String> = connection.coroutines()

// Setting a value commands.set("user:100", "Alice") // Getting a value val user = commands.get("user:100") println("User: $user") // User: Alice

// Working with lists commands.lpush("queue", "task1", "task2") val task = commands.lpop("queue") println("Task: $task") // Task: task2

connection.close() client.shutdown()}

fun main() = runBlocking { redisExample()}


2. Redisson — object-oriented approach to Redis



Redisson is not just a client, but a whole distributed Java platform built on top of Redis. Instead of working with raw commands, Redisson offers a rich set of distributed objects: RMap, RSet, RLock, RQueue, RAtomicLong, and many others. For Kotlin, this means you can work with Redis like a regular in-memory collection.



Features of Redisson:

  • Ready-made distributed collections and objects
  • Support for distributed locks, semaphores
  • Integration with Spring Data, Hibernate, JCache
  • Support for reactive API and RxJava3
  • Automatic object serialization


Example of using Redisson with Kotlin:

// build.gradle.ktsdependencies {    implementation("org.redisson:redisson:3.29.0")}

import org.redisson.Redissoni

Recommendations