View a markdown version of this page

Armazenando os resultados da consulta do banco de dados - Amazon ElastiCache

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Armazenando os resultados da consulta do banco de dados

Um padrão comum para reduzir as latências de consulta ao banco de dados é o cache de consultas. Os aplicativos implementam o cache de consultas consultando o cache em busca de resultados associados a uma consulta ao banco de dados, retornando esses resultados se estiverem armazenados em cache. Se nenhum resultado em cache for encontrado, a consulta será executada no banco de dados, os resultados serão preenchidos no cache e os resultados serão retornados ao aplicativo que inicia a consulta. As consultas subsequentes ao banco de dados retornarão os resultados em cache, desde que permaneçam no cache.

Quando usar o cache de consultas

O armazenamento em cache de consultas com ElastiCache é mais eficaz para os seguintes tipos de carga de trabalho:

  • Read-heavy aplicativos em que as mesmas consultas são executadas repetidamente com dados que mudam com pouca frequência.

  • Consultas caras, como pesquisas não indexadas, agregações ou junções de várias tabelas, em que os tempos de execução das consultas são longos.

  • High-concurrency cenários em que o descarregamento de leituras ElastiCache reduz a pressão da CPU do banco de dados e melhora a taxa de transferência geral.

O armazenamento em cache de consultas não é recomendado para consultas em que é necessária uma consistência forte ou para consultas em transações com várias instruções que exigem consistência de leitura após gravação.

Usar o AWS Wrapper JDBC avançado

Se seu aplicativo estiver usando um driver JDBC para consultar um banco de dados relacional, você poderá implementar o cache de consultas com o plug-in Remote Query Cache no Advanced JDBC Wrapper.AWS O plug-in armazena automaticamente em cache os conjuntos de resultados de consultas SQL selecionadosElastiCache, retornando o conjunto de resultados do cache em vez do banco de dados para futuras consultas. O armazenamento em cache dos resultados da consulta pode reduzir a carga do banco de dados e diminuir as latências médias das consultas com o mínimo de alterações no código do aplicativo.

Como o cache de consultas funciona com o plug-in

O plug-in de cache de consulta remota facilita que aplicativos Java que consultam bancos de dados PostgreSQL, MySQL ou MariaDB armazenem automaticamente os resultados da consulta em cache. ElastiCache Você configura o plug-in com as informações do endpoint de cache e indica quais consultas em seu código devem ser armazenadas em cache usando dicas de consulta. Quando o plug-in detecta uma consulta sugerida, ele retorna o resultado da consulta do cache, se presente (uma ocorrência no cache). Se os resultados não estiverem no cache (falta de cache), o plug-in executa a consulta no banco de dados, armazenará os resultados no cache e retornará os resultados ao seu aplicativo para que, na próxima vez em que a consulta for executada, os resultados possam ser servidos do cache.

Dicas de armazenamento em cache

Você controla quais consultas devem ser armazenadas em cache definindo dicas em cada consulta. Você pode aplicar dicas de consulta diretamente às cadeias de caracteres de consulta no código do seu aplicativo com um prefixo de comentário:

/* CACHE_PARAM(ttl=300s) */ SELECT * FROM my_table WHERE id = 42

onde ttl está o tempo de vida em segundos. Você também pode definir dicas de consulta em instruções preparadas usando estruturas comuns, como Hibernate e Spring Boot.

Pré-requisitos

Para usar o plug-in Remote Query Cache em seu aplicativo, você precisa de um cache OSS ElastiCache para Valkey ou Redis (há suporte para servidores e baseado em nós) junto com as seguintes dependências:

Exemplo: Armazenar uma consulta em cache com o plug-in

O exemplo a seguir mostra como habilitar o plug-in e armazenar em cache um resultado de consulta por 300 segundos (5 minutos) com um cache sem servidor ElastiCache for Valkey:

import java.sql.*; import java.util.Properties; public class QueryCacheExample { public static void main(String[] args) throws SQLException { Properties props = new Properties(); props.setProperty("user", "myuser"); props.setProperty("password", "mypassword"); // Enable the remote query cache plugin props.setProperty("wrapperPlugins", "remoteQueryCache"); // Point to your ElastiCache endpoint props.setProperty("cacheEndpointAddrRw", "my-cache.serverless.use1.cache.amazonaws.com:6379"); Connection conn = DriverManager.getConnection( "jdbc:aws-wrapper:postgresql://my-database.cluster-abc123.us-east-1.rds.amazonaws.com:5432/mydb", props ); Statement stmt = conn.createStatement(); // The SQL comment hint tells the plugin to cache this query for 300 seconds ResultSet rs = stmt.executeQuery( "/* CACHE_PARAM(ttl=300s) */ SELECT product_name, price FROM products WHERE category = 'electronics'" ); while (rs.next()) { System.out.println(rs.getString("product_name") + ": $" + rs.getBigDecimal("price")); } rs.close(); stmt.close(); conn.close(); } }

Na primeira vez que essa consulta é executada, o resultado é retornado do banco de dados e armazenado em ElastiCache cache. Nos próximos 300 segundos, as execuções subsequentes dessa consulta serão atendidas diretamente do cache.

Você pode encontrar exemplos mais abrangentes e informações detalhadas sobre a configuração do plug-in na documentação do Remote Query Cache Plugin.