Mise en cache en Kotlin : Redis, Caffeine et Ehcache — guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Mise en cache en Kotlin : Redis et autres outils pour accélérer les applications



La mise en cache est l'un des mécanismes clés pour améliorer les performances des applications modernes. Dans l'écosystème Kotlin (comme en Java), plusieurs bibliothèques puissantes sont disponibles pour organiser la mise en cache : des solutions simples en mémoire aux systèmes distribués basés sur Redis. Dans cet article, nous examinerons les outils populaires, leur configuration et des exemples d'utilisation en langage Kotlin.



Pourquoi la mise en cache est-elle nécessaire ?

Le cache permet de réduire le temps de réponse de l'application, de diminuer la charge sur la base de données et les API externes. Les principaux scénarios :

  • Requêtes répétées aux mêmes données (par exemple, référentiels, configurations) ;
  • Calculs à longue durée d'exécution (génération de rapports, agrégations complexes) ;
  • Travail avec des services externes (limitation de débit, latences réseau).


1. Redis — mise en cache distribuée

Redis est un magasin de données en mémoire souvent utilisé comme cache distribué. Dans l'écosystème Kotlin/Java, les principaux clients sont Lettuce et Jedis. Pour Spring Boot, il est recommandé d'utiliser spring-boot-starter-data-redis.



Exemple d'intégration de Redis avec Kotlin et Spring Boot

// build.gradle.ktsimplementation("org.springframework.boot:spring-boot-starter-data-redis")implementation("org.springframework.boot:spring-boot-starter-cache")

// application.ymlspring: cache: type: redis redis: host: localhost port: 6379

// Service avec mise en cache@Serviceclass UserService(private val userRepository: UserRepository) {

@Cacheable("users") fun getUserById(id: Long): User { // Simulation d'une requête longue Thread.sleep(2000) return userRepository.findById(id).orElseThrow() }

@CacheEvict("users", key = "#id") fun deleteUser(id: Long) { userRepository.deleteById(id) }}

L'annotation @Cacheable enregistre automatiquement le résultat dans Redis, tandis que @CacheEvict supprime l'entrée lors de la modification des données.



2. Caffeine — cache en mémoire haute performance

Caffeine est une bibliothèque moderne de mise en cache locale qui surpasse largement Guava Cache en termes de vitesse et de fonctionnalités. Elle est idéale pour les architectures monolithiques ou microservices.



Configuration de Caffeine en Kotlin

// Dépendanceimplementation("com.github.ben-manes.caffeine:caffeine:3.1.8")

// Création du cacheval cache: Cache<String, User> = Caffeine.newBuilder() .expireAfterWrite(10, TimeUnit.MINUTES) .maximumSize(1000) .recordStats() .build()

// Utilisationfun getUser(id: String): User { return cache.get(id) { key -> // Fonction de chargement si la clé est absente userRepository.findById(key).orElseThrow() }}

// Obtention des statistiquesprintln("Hit rate: ${cache.stats().hitRate()}")

Caffeine prend en charge l'expulsion automatique des anciennes entrées (expire after write/access), la limite de taille et la collecte de statistiques pour le suivi.



3. Ehcache — solution mature avec support du stockage sur disque

Ehcache est l'une des plus anciennes bibliothèques de mise en cache pour Java. Elle prend en charge le stockage multicouche (heap, off-heap, disk) et le clustering. Pour Kotlin, l'API Java standard est utilisée.



Exemple avec Ehcache 3 et configuration XML

// Dépendanceimplementation("org.ehcache:ehcache:3.10.8")

// Configuration (ehcache.xml)<config xmlns="http://www.ehcache.org/v3"> <cache alias="users"> <key-type>java.lang.Long</key-type> <value-type>com.example.User</value-type> <resources> <heap unit="entries">100</heap> <offheap unit="MB">10</offheap> </res

Recommendations