The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

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, onde cache-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:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-redis-cache</artifactId>
</dependency>
build.gradle
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: QUARKUS_CACHE_REDIS_CLIENT_NAME

Show more

string

The default type of the value stored in the cache.

Environment variable: QUARKUS_CACHE_REDIS_VALUE_TYPE

Show more

string

The key type, String by default.

Environment variable: QUARKUS_CACHE_REDIS_KEY_TYPE

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: QUARKUS_CACHE_REDIS_EXPIRE_AFTER_WRITE

Show more

Duration 

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: QUARKUS_CACHE_REDIS_EXPIRE_AFTER_ACCESS

Show more

Duration 

the key prefix allowing to identify the keys belonging to the cache. If not set, use "cache:$cache-name"

Environment variable: QUARKUS_CACHE_REDIS_PREFIX

Show more

string

Whether the access to the cache should be using optimistic locking. See Redis Optimistic Locking for details. Default is false.

Environment variable: QUARKUS_CACHE_REDIS_USE_OPTIMISTIC_LOCKING

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: QUARKUS_CACHE_REDIS__CACHE_NAME__VALUE_TYPE

Show more

string

The key type, String by default.

Environment variable: QUARKUS_CACHE_REDIS__CACHE_NAME__KEY_TYPE

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: QUARKUS_CACHE_REDIS__CACHE_NAME__EXPIRE_AFTER_WRITE

Show more

Duration 

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: QUARKUS_CACHE_REDIS__CACHE_NAME__EXPIRE_AFTER_ACCESS

Show more

Duration 

the key prefix allowing to identify the keys belonging to the cache. If not set, use "cache:$cache-name"

Environment variable: QUARKUS_CACHE_REDIS__CACHE_NAME__PREFIX

Show more

string

Whether the access to the cache should be using optimistic locking. See Redis Optimistic Locking for details. Default is false.

Environment variable: QUARKUS_CACHE_REDIS__CACHE_NAME__USE_OPTIMISTIC_LOCKING

Show more

boolean

About the Duration format

To write duration values, use the standard java.time.Duration format. See the Duration#parse() Java API documentation for more information.

Você também pode usar um formato simplificado, começando com um número:

  • Se o valor for apenas um número, ele representará o tempo em segundos.

  • Se o valor for um número seguido de 'ms', ele representa o tempo em milissegundos.

Em outros casos, o formato simplificado é traduzido para o formato 'java.time.Duration' para análise:

  • Se o valor for um número seguido de 'h', 'm' ou 's', ele é prefixado com 'PT'.

  • Se o valor for um número seguido de 'd', ele é prefixado com 'P'.

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).

Conteúdo Relacionado