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
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:
-
AWS Advanced JDBC Wrapper
, versión 3.3.0 o posterior. -
Apache Commons Pool
versión 2.11.1 o posterior. -
Valkey Glide
versión 2.3.0 o posterior.
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é.
Recursos relacionados
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