Caching in Kotlin: Redis, Memcached und integrierte Lösungen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Caching in Kotlin: Redis, Memcached und integrierte Lösungen: von A bis Z

\n\n

Moderne Anwendungen in Kotlin erfordern hohe Antwortgeschwindigkeiten und effiziente Datenverarbeitung. Eines der wichtigsten Werkzeuge, um dieses Ziel zu erreichen, ist das Caching. In diesem Artikel analysieren wir drei Ansätze: die Verwendung von Redis, Memcached und integrierten Lösungen auf JVM-Ebene. Sie erfahren, wie Sie die richtige Strategie auswählen, und erhalten fertige Codebeispiele für die Integration in Ihr Projekt.

\n\n

1. Integriertes Caching in Kotlin (In-Memory Cache)

\n\n

Der einfachste Weg ist die Verwendung eines Caches innerhalb der Anwendung. In Kotlin (das auf der JVM läuft) können Sie Standard-Collections oder spezialisierte Bibliotheken wie Caffeine oder Guava Cache verwenden.

\n\n

Beispiel mit Caffeine (empfohlen)

\n

Fügen Sie die Abhängigkeit in build.gradle.kts hinzu:

\n
implementation("com.github.ben-manes.caffeine:caffeine:3.1.8")
\n\n

Erstellen Sie einen Caching-Service:

\n
import com.github.benmanes.caffeine.cache.Cache\nimport com.github.benmanes.caffeine.cache.Caffeine\nimport java.util.concurrent.TimeUnit\n\nclass UserCache {\n    private val cache: Cache<String, User> = Caffeine.newBuilder()\n        .expireAfterWrite(10, TimeUnit.MINUTES)\n        .maximumSize(1000)\n        .build()\n\n    fun getUser(id: String): User? = cache.getIfPresent(id)\n\n    fun putUser(id: String, user: User) {\n        cache.put(id, user)\n    }\n}
\n\n

Vorteile: minimale Latenz, keine Netzwerkaufrufe, einfache Konfiguration.
\nNachteile: Cache geht beim Neustart der Anwendung verloren, begrenzt durch den JVM-Arbeitsspeicher.

\n\n

2. Caching mit Redis in Kotlin

\n\n

Redis ist ein leistungsstarkes In-Memory-Data-Store, das komplexe Datenstrukturen unterstützt. Ideal für verteilte Systeme.

\n\n

Konfiguration über Spring Data Redis

\n

Fügen Sie die Abhängigkeit hinzu:

\n
implementation("org.springframework.boot:spring-boot-starter-data-redis")\nimplementation("org.jetbrains.kotlin:kotlin-reflect")
\n\n

Konfiguration (application.yml):

\n
spring:\n  redis:\n    host: localhost\n    port: 6379\n    timeout: 2000ms\n    lettuce:\n      pool:\n        max-active: 8\n        max-idle: 4
\n\n

Beispiel eines Services mit Spring Cache-Annotationen:

\n
import org.springframework.cache.annotation.Cacheable\nimport org.springframework.stereotype.Service\n\n@Service\nclass ProductService {\n\n    @Cacheable("products", key = "#id")\n    fun getProduct(id: Long): Product {\n        println("Lade aus der Datenbank: $id")\n        return Product(id, "Produkt $id")\n    }\n}
\n\n

Für die direkte Arbeit mit Redis (ohne Spring):

\n
import io.lettuce.core.RedisClient\nimport io.lettuce.core.api.sync.RedisCommands\n\nclass RedisCache {\n    private val commands: RedisCommands<String, String>\n\n    init {\n        val client = RedisClient.create("redis://localhost:6379")\n        commands = client.connect().sync()\n    }\n\n    fun set(key: String, value: String, ttlSeconds: Long = 300) {\n        commands.setex(key, ttlSeconds, value)\n    }\n\n    fun get(key: String): String? = commands.get(key)\n}
\n\n

Vorteile: verteilter Cache, Persistenz, Unterstützung von TTL und komplexen Strukturen.
\nNachteile: separater Server erforderlich, etwas höhere Latenz (Netzwerkaufruf).

\n\n

3. Caching mit Memcached in Kotlin

\n\n

Memcached ist ein leichtgewichtiger verteilter Speicher, optimiert für die Speicherung kleiner Objekte im Arbeitsspeicher.

\n\n

Anbindung über die Bibliothek xmemcached

\n

Fügen Sie in build.gradle.kts hinzu:

\n
implementation("com.googlecode.xmemcached:xmemcached:2.4.8")
\n\n

Beispiel zur Verwendung:

\n
import net.rubyeye.xmemcached.MemcachedClient\nimport net.rubyeye.xmemcached.XMem                

Blogs

Buchempfehlungen