Kotlin 中的缓存:Redis、Memcached 及内置解决方案从 A 到 Z

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin 中的缓存:Redis、Memcached 及内置解决方案 — 从 A 到 Z



缓存是提升应用程序性能的关键工具之一。在运行于 JVM 和 Android 之上的 Kotlin 生态系统中,开发者可以使用多种解决方案:从分布式系统(Redis、Memcached)到内置本地缓存(Caffeine、Guava Cache、Ehcache)。在本文中,我们将分析如何将每种方案集成到 Kotlin 项目中,提供代码示例并给出选择建议。



1. JVM 内置缓存:Caffeine 和 Guava Cache



对于 Kotlin 中的本地缓存,Caffeine 是最佳选择——这是一个用 Java 编写的高性能库,与 Kotlin 完全兼容。它支持基于时间、大小和权重的自动淘汰。另一种选择是 Google 的 Guava Cache,但 Caffeine 速度更快(通常快 2-3 倍)。



示例:Caffeine + Kotlin



在 build.gradle.kts 中添加依赖:

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


创建一个最多包含 1000 个元素、TTL 为 10 分钟的缓存:

import com.github.benmanes.caffeine.cache.Caffeineimport java.util.concurrent.TimeUnit

val cache = Caffeine.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .build<String, String>()

// 使用cache.put("user:42", "{\\"name\\":\\"Alice\\"}")val user = cache.getIfPresent("user:42")println(user) // {"name":"Alice"}


示例:Guava Cache + Kotlin



implementation("com.google.guava:guava:33.0.0-jre")


import com.google.common.cache.CacheBuilderimport java.util.concurrent.TimeUnit

val guavaCache = CacheBuilder.newBuilder() .maximumSize(500) .expireAfterWrite(5, TimeUnit.MINUTES) .build<String, String>()

guavaCache.put("session:abc", "active")println(guavaCache.getIfPresent("session:abc")) // active


何时使用:用于存储单个应用程序实例的临时数据(例如,复杂计算的结果、令牌、配置)。不适用于具有多个实例的微服务——数据不会同步。



2. Redis — 用于微服务的分布式缓存



Redis 是一个内存中的键值存储,用作分布式缓存、消息代理和数据库。对于 Kotlin,最好的客户端是 Lettuce(异步、响应式、线程安全)。



安装与连接



implementation("io.lettuce:lettuce-core:6.3.2.RELEASE")


示例:连接与基本操作



import io.lettuce.core.RedisClientimport io.lettuce.core.api.sync.RedisCommands

val client = RedisClient.create("redis://localhost:6379")val connection = client.connect()val commands: RedisCommands<String, String> = connection.sync()

// 设置键,TTL 为 60 秒commands.setex("user:123", 60, "{\\"name\\":\\"Bob\\"}")

// 读取val data = commands.get("user:123")println(data) // {"name":"Bob"}

connection.close()client.shutdown()


示例:响应式客户端(Kotlin 协程)



import io.lettuce.core.RedisClientimport io.lettuce.core.api.reactive.RedisReactiveCommandsimport kotlinx.coroutines.reactive.awaitFirstOrNull

suspend fun getFromRedis(key: String): String? { val client = RedisClient.create("redis://localhost:6379") val connection = client.connect() val reactive: RedisReactiveCommands<String, String> = connection.reactive()

val result = reactive.get(key).awaitFirstOrNull() connection.close() client.shutdown() return result}


何时使用:分布式系统、微服务、共享会话、速率限制、发布/订阅消息传递。

博客

书籍推荐