Redis Cache
默认情况下,Quarkus Cache 使用 Caffeine 作为后端。也可以使用 Redis。 :iokays-category: quarkus :iokays-path: modules/ROOT/pages/_includes/extension-status.adoc :keywords: Quarkus, 中文文档, 编程技术
该技术被认为是 {extension-status}。 有关可能状态的完整列表,请查看我们的 FAQ entry. |
Redis as cache backend
在将 Redis 用作 Quarkus 缓存的后端时,每个缓存项都将存储在 Redis 中:
-
后端使用 _<default>_Redis 客户端(如果没有另行配置),因此请确保已配置(或使用 redis dev service)
-
Redis 密钥构建如下:
cache:$cache-name:$cache-key
,其中 `cache-key`是应用程序使用的密钥。 -
如果需要,该值将编码为 JSON
Use the Redis backend
首先,你需要将 `quarkus-redis-cache`扩展添加到你的项目中:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-redis-cache</artifactId>
</dependency>
implementation("io.quarkus:quarkus-redis-cache")
然后,使用 `@CacheResult`和其他缓存注解,如 Quarkus Cache guide中所述:
@GET
@Path("/{keyElement1}/{keyElement2}/{keyElement3}")
@CacheResult(cacheName = "expensiveResourceCache")
public ExpensiveResponse getExpensiveResponse(@PathParam("keyElement1") @CacheKey String keyElement1,
@PathParam("keyElement2") @CacheKey String keyElement2, @PathParam("keyElement3") @CacheKey String keyElement3,
@QueryParam("foo") String foo) {
invocations.incrementAndGet();
ExpensiveResponse response = new ExpensiveResponse();
response.setResult(keyElement1 + " " + keyElement2 + " " + keyElement3 + " too!");
return response;
}
@POST
@CacheInvalidateAll(cacheName = "expensiveResourceCache")
public void invalidateAll() {
}
Configure the Redis backend
Redis 后端使用 `<default>`Redis 客户端。请参阅 Redis reference以配置对 Redis 的访问。
在开发模式中,你可以使用 Redis Dev Service。 |
如果你想为你的缓存使用另一个 Redis,请按如下方式配置 client-name
:
quarkus.cache.redis.client-name=my-redis-for-cache
在写入 Redis 或从 Redis 读取时,Quarkus 需要知道类型。事实上,对象需要序列化和反序列化。为此,你可能需要配置要缓存的键和值类型(类名)。在构建时,Quarkus 会尝试从应用程序代码中推断类型,但可以使用以下方法覆盖该决策:
# Default configuration
quarkus.cache.redis.key-type=java.lang.String
quarkus.cache.redis.value-type=org.acme.Person
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.key-type=java.lang.String
quarkus.cache.redis.expensiveResourceCache.value-type=org.acme.Supes
你还可以配置缓存条目的生存时间:
# Default configuration
quarkus.cache.redis.expire-after-write=10s
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.expire-after-write=1h
如果未配置 expire-after-write
,则不会逐出该条目。你需要使用 `@CacheInvalidateAll`或 `@CacheInvalidate`注解使值无效。
下表列出了受支持的属性:
Unresolved include directive in modules/ROOT/pages/cache-redis-reference.adoc - include::../../../target/quarkus-generated-doc/config/quarkus-redis-cache.adoc[]
Configure the Redis key
默认情况下,Redis 后端使用以下键存储条目:cache:$cache-name:$cache-key
,其中 cache-key`是应用程序使用的键。因此,你可以使用 Redis `KEYS`命令找到单个缓存的所有条目:`KEYS cache:$cache-name:*
`cache:$cache-name:`部分可以使用`prefix`属性进行配置:
# Default configuration
quarkus.cache.redis.prefix=my-cache
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.prefix=my-expensive-cache
在这些情况下,你可以使用`KEYS my-cache:*`找到默认缓存管理的所有键,所有键都是使用`expensiveResourceCache`缓存或使用`KEYS my-expensive-cache:*`管理的。
Enable optimistic locking
可以_direct_缓存的访问或者使用 optimistic locking。默认情况下,乐观锁是禁用的。
你可以使用以下方式启用乐观锁:
# Default configuration
quarkus.cache.redis.use-optimistic-locking=true
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.use-optimistic-locking=true
使用时,键为_watched_并且_SET_命令在事务中执行(MULTI/EXEC
)。