Cache Redis
Por padrão, o Quarkus Cache usa o Caffeine como backend. É possível usar o Redis em seu lugar.
Essa tecnologia é considerada preview. In preview, backward compatibility and presence in the ecosystem is not guaranteed. Specific improvements might require changing configuration or APIs, and plans to become stable are under way. Feedback is welcome on our mailing list or as issues in our GitHub issue tracker. Para obter uma lista completa de possíveis status, consulte nosso FAQ. |
Redis como backend cache
Ao usar o Redis como backend para a cache do Quarkus, cada item armazenado em cache será armazenado no Redis:
-
The backend uses the <default> Redis client (if not configured otherwise), so make sure it’s configured (or use the Redis Dev Service)
-
a chave Redis é construída da seguinte forma:
cache:$cache-name:$cache-key
, ondecache-key
é a chave que a aplicação utiliza. -
o valor é codificado para JSON, se necessário
Utilizar o Redis como backend
Em primeiro lugar, é necessário adicionar a extensão quarkus-redis-cache
ao seu projeto:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-redis-cache</artifactId>
</dependency>
implementation("io.quarkus:quarkus-redis-cache")
Em seguida, utilize @CacheResult
e outras anotações de cache do Quarkus, como explicado em Guia de cache Quarkus:
@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() {
}
Configurar o Redis para uso no backend do cache
O backend do Redis usa o cliente Redis <default>
. Consulte a referência do Redis para configurar o acesso ao Redis.
No modo de desenvolvimento dev mode , você pode utilizar o Redis Dev Service.
|
Se você pretende utilizar outro Redis para a sua cache, configure o client-name
da seguinte forma:
quarkus.cache.redis.client-name=my-redis-for-cache
Ao escrever no Redis ou ler do Redis, o Quarkus precisa saber o tipo. De fato, os objetos precisam ser serializados e desserializados. Para isso, talvez seja necessário configurar o tipo (nomes de classe) da chave e do valor que o usuário deseja armazenar em cache. No momento da construção, o Quarkus tenta deduzir os tipos a partir do código da aplicação, mas essa decisão pode ser substituída usando:
# 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
Também é possível configurar o tempo de vida das entradas em cache:
# Default configuration
quarkus.cache.redis.expire-after-write=10s
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.expire-after-write=1h
Se o expire-after-write
não estiver configurado, a entrada não será removida. Você precisaria invalidar os valores usando as anotações @CacheInvalidateAll
ou @CacheInvalidate
.
A tabela seguinte lista as propriedades suportadas:
Propriedade de Configuração Fixa no Momento da Compilação - Todas as outras propriedades de configuração podem ser sobrepostas em tempo de execução.
Configuration property |
Tipo |
Padrão |
---|---|---|
The name of the named Redis client to be used for communicating with Redis. If not set, use the default Redis client. Environment variable: Show more |
string |
|
The default type of the value stored in the cache. Environment variable: Show more |
string |
|
The key type, Environment variable: Show more |
string |
|
Specifies that each entry should be automatically removed from the cache once a fixed duration has elapsed after the entry’s creation, or the most recent replacement of its value. Environment variable: Show more |
||
Specifies that each entry should be automatically removed from the cache once a fixed duration has elapsed after the last access of its value. Environment variable: Show more |
||
the key prefix allowing to identify the keys belonging to the cache. If not set, use "cache:$cache-name" Environment variable: Show more |
string |
|
Whether the access to the cache should be using optimistic locking. See Redis Optimistic Locking for details. Default is Environment variable: Show more |
boolean |
|
Additional configuration applied to a specific Redis cache (highest precedence) |
Tipo |
Padrão |
The default type of the value stored in the cache. Environment variable: Show more |
string |
|
The key type, Environment variable: Show more |
string |
|
Specifies that each entry should be automatically removed from the cache once a fixed duration has elapsed after the entry’s creation, or the most recent replacement of its value. Environment variable: Show more |
||
Specifies that each entry should be automatically removed from the cache once a fixed duration has elapsed after the last access of its value. Environment variable: Show more |
||
the key prefix allowing to identify the keys belonging to the cache. If not set, use "cache:$cache-name" Environment variable: Show more |
string |
|
Whether the access to the cache should be using optimistic locking. See Redis Optimistic Locking for details. Default is Environment variable: Show more |
boolean |
About the Duration format
To write duration values, use the standard Você também pode usar um formato simplificado, começando com um número:
Em outros casos, o formato simplificado é traduzido para o formato 'java.time.Duration' para análise:
|
Configurar a chave Redis
Por padrão, o backend do Redis armazena a entrada usando as seguintes chaves: cache:$cache-name:$cache-key
, em que cache-key
é a chave que o aplicativo usa. Assim, você pode encontrar todas as entradas de um único cache usando o comando Redis KEYS
: KEYS cache:$cache-name:*
O cache:$cache-name:
segmento pode ser configurado utilizando a propriedade prefix
:
# Default configuration
quarkus.cache.redis.prefix=my-cache
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.prefix=my-expensive-cache
Nestes casos, você pode encontrar todas as chaves gereciadas pela cache padrão utilizando KEYS my-cache:*
, e todas as chaves gerenciadas pela cache expensiveResourceCache
utilizando: KEYS my-expensive-cache:*
.
Ativar o bloqueio otimista (Optimistic locking
)
O acesso ao cache pode ser direto ou usar o bloqueio otimista. Por padrão, o bloqueio otimista é desativado.
É possível ativar o bloqueio otimista utilizando:
# Default configuration
quarkus.cache.redis.use-optimistic-locking=true
# Configuration for `expensiveResourceCache`
quarkus.cache.redis.expensiveResourceCache.use-optimistic-locking=true
Quando utilizado, a chave é vigiada e o comando SET é executado numa transação ( MULTI/EXEC
).