My favorites | Português | Sign in

Visão geral da API de cache de memória em Java

Aplicativos da web escaláveis de alto desempenho utilizam frequentemente, para algumas tarefas, um cache de dados distribuído na frente ou no lugar de um armazenamento persistente robusto. O Google App Engine inclui um serviço de cache de memória para essa finalidade.

Como armazenar dados em cache com JCache

A API de cache de memória em Java implementa a interface JCache (jvavax.cache), um rascunho padrão descrito por JSR 107. A JCache fornece aos dados armazenados em cache uma interface semelhante a um mapa. Você armazena e recupera valores no cache usando chaves. As chaves e os valores podem ser de qualquer tipo ou classe Serializable.

import java.util.Collections;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

// ...
        Cache cache;

        try {
            cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
        } catch (CacheException e) {
            // ...
        }

        String key;      // ...
        byte[] value;    // ...

        // Put the value into the cache.
        cache.put(key, value);

        // Get the value from the cache.
        value = (byte[]) cache.get(key);

Quando usar um cache de memória

Um dos usos de um cache de memória é acelerar consultas comuns no armazenamento de dados. Se muitas solicitações fizerem a mesma consulta com os mesmos parâmetros e não for necessário exibir imediatamente no site as alterações nos resultados, o aplicativo poderá armazenar os resultados em cache no cache de memória. As solicitações subsequentes podem consultar o cache de memória e executar a consulta no armazenamento de dados apenas se não houver resultados ou se eles tiverem expirado. Dados da sessão, preferência do usuário e quaisquer outras consultas executadas na maioria das páginas de um site são boas candidatas para o armazenamento em cache.

O cache de memória pode ser útil para outros valores temporários. No entanto, ao considerar se deseja armazenar um valor apenas no cache de memória e não em outro armazenamento persistente, verifique se o seu aplicativo se comporta de maneira aceitável quando o valor deixa de ficar disponível de repente. Os valores podem expirar do cache de memória a qualquer momento e podem expirar antes do prazo de expiração definido para o valor. Por exemplo, se a ausência repentina dos dados de sessão de um usuário causarem o funcionamento inadequado da sessão, provavelmente esses dados devam ser armazenados no armazenamento de dados, além do cache de memória.

Como os dados armazenados em cache expiram

Por padrão, os valores armazenados no cache de memória são retidos o máximo possível. Os valores podem ser removidos do cache quando um novo valor é adicionado a ele. Isso acontece se o cache estiver com pouca memória. Quando os valores são removidos devido à pressão da memória, os valores menos usados recentemente são removidos primeiro.

O aplicativo pode fornecer um prazo de expiração quando um valor é armazenado, como um número de segundos relativo ao momento em que o valor foi adicionado ou como um horário inicial Unix absoluto no futuro (um número de segundos desde a meia-noite do dia 1º de janeiro de 1970). O valor será removido exatamente nesse prazo, embora possa ser removido por outras razões.

Em circunstâncias raras, os valores também podem desaparecer do cache antes da data de expiração por razões diferentes da pressão da memória. Embora o cache de memória seja resistente às falhas do servidor, os valores do cache de memória não são salvos no disco, por isso uma falha do serviço pode fazer com que os valores não fiquem disponíveis.

Em geral, um aplicativo não deve esperar que um valor armazenado em cache esteja sempre disponível.

Cotas e limites

Cada chamada do cache de memória é computada para a cota Chamadas da API do cache de memória.

Os dados enviados pelo aplicativo ao cache de memória são computados para a cota Dados enviados para a API (cache de memória). Os dados recebidos do cache de memória são computados para a cota Dados recebidos da API (cache de memória).

Para obter mais informações sobre cotas, consulte Quotas (Cotas) e a seção "Quota Details" (Quota Details) do Console de administração.

Além das cotas, os seguintes limites são aplicados ao uso do serviço de mensagens:

Limite Quantidade
tamanho máximo de um valor armazenado em cache 1 megabyte