View a markdown version of this page

Guardar en caché los resultados de las consultas de la base - Amazon ElastiCache

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Guardar en caché los resultados de las consultas de la base

Un patrón común para reducir las latencias de las consultas de la base de datos es el almacenamiento en caché de las consultas. Las aplicaciones implementan el almacenamiento en caché consultando en la caché los resultados asociados a una consulta de base de datos y devolviendo esos resultados si están en caché. Si no se encuentra ningún resultado en caché, la consulta se ejecuta en la base de datos, los resultados se rellenan en la caché y, a continuación, se devuelven a la aplicación que inició la consulta. Las consultas posteriores a la base de datos devolverán los resultados en caché siempre que permanezcan en la memoria caché.

Cuándo usar el almacenamiento en caché de consultas

El almacenamiento en caché de consultas con ElastiCache es más eficaz para los siguientes tipos de carga de trabajo:

  • Read-heavy aplicaciones en las que las mismas consultas se ejecutan repetidamente con datos que cambian con poca frecuencia.

  • Consultas costosas, como las búsquedas no indexadas, las agregaciones o las uniones de varias tablas, en las que los tiempos de ejecución de las consultas son prolongados.

  • High-concurrency escenarios en los que la descarga de datos ElastiCache reduce la presión de la CPU de la base de datos y mejora el rendimiento general.

El almacenamiento en caché de consultas no se recomienda para consultas en las que se requiere una gran coherencia ni para consultas dentro de transacciones con varios estados que requieren coherencia de lectura tras escritura.

Uso de AWS Envoltorio JDBC avanzado

Si su aplicación utiliza un controlador JDBC para consultar una base de datos relacional, puede implementar el almacenamiento en caché de consultas con el complemento Remote Query Cache del contenedor JDBC avanzado.AWS El complemento almacena automáticamente en ElastiCache caché los conjuntos de resultados de consultas SQL seleccionados y devuelve el conjunto de resultados de la caché en lugar de la base de datos para futuras consultas. El almacenamiento en caché de los resultados de las consultas puede reducir la carga de la base de datos y reducir la latencia media de las consultas con cambios mínimos en el código de la aplicación.

Cómo funciona el almacenamiento en caché de consultas con el complemento

El complemento Remote Query Cache facilita que las aplicaciones Java que consultan bases de datos PostgreSQL, MySQL o MariaDB almacenen en caché automáticamente los resultados de las consultas. ElastiCache Configura el complemento con la información de los puntos finales de la caché e indica qué consultas del código desea almacenar en caché mediante sugerencias de consulta. Cuando el complemento detecta una consulta sugerida, devuelve el resultado de la consulta desde la caché, si está presente (una consulta sugerida). Si los resultados no están en la caché (se pierde la caché), el complemento ejecuta la consulta en la base de datos, los almacena en la caché y los devuelve a la aplicación para que la próxima vez que se ejecute la consulta, los resultados se puedan mostrar desde la caché.

Sugerencias de almacenamiento en caché

Puede controlar qué consultas almacenar en caché configurando sugerencias en cada consulta. Puede aplicar sugerencias de consulta directamente a las cadenas de consulta del código de la aplicación con un prefijo de comentario:

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

donde ttl es el tiempo de vida en segundos. También puede configurar sugerencias de consulta en declaraciones preparadas utilizando marcos comunes como Hibernate y Spring Boot.

Requisitos previos

Para utilizar el complemento Remote Query Cache en tu aplicación, necesitas una caché OSS ElastiCache de Valkey o Redis (se admiten tanto la caché sin servidor como la basada en nodos) junto con las siguientes dependencias:

Ejemplo: almacenar en caché una consulta con el complemento

El siguiente ejemplo muestra cómo habilitar el complemento y almacenar en caché el resultado de una consulta durante 300 segundos (5 minutos) con una caché sin servidor ElastiCache de 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(); } }

La primera vez que se ejecuta esta consulta, el resultado se devuelve desde la base de datos y se almacena en caché. ElastiCache Durante los siguientes 300 segundos, las ejecuciones posteriores de esa consulta se muestran directamente desde la memoria caché.

Puedes encontrar ejemplos más extensos e información detallada sobre la configuración de los complementos en la documentación del complemento Remote Query Cache.