Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Mise en cache des résultats des requêtes de base de données
La mise en cache des requêtes est un modèle courant pour réduire les temps de latence des requêtes de base de données. Les applications implémentent la mise en cache des requêtes en interrogeant le cache pour obtenir les résultats associés à une requête de base de données et en renvoyant ces résultats s'ils sont mis en cache. Si aucun résultat mis en cache n'est trouvé, la requête est exécutée sur la base de données, les résultats sont renseignés dans le cache, puis renvoyés à l'application qui lance la requête. Les requêtes de base de données suivantes renverront alors les résultats mis en cache tant qu'ils restent dans le cache.
Quand utiliser la mise en cache des requêtes
La mise en cache des requêtes avec ElastiCache est la plus efficace pour les types de charge de travail suivants :
-
Read-heavy applications dans lesquelles les mêmes requêtes sont exécutées de manière répétée avec des données qui changent rarement.
-
Requêtes coûteuses telles que les recherches non indexées, les agrégations ou les jointures multitables où les temps d'exécution des requêtes sont longs.
-
High-concurrency scénarios dans lesquels le déchargement permet de ElastiCache réduire la pression du processeur de la base de données et d'améliorer le débit global.
La mise en cache des requêtes n'est pas recommandée pour les requêtes nécessitant une forte cohérence, ou pour les requêtes au sein de transactions comportant plusieurs instructions qui nécessitent une cohérence entre lecture après écriture.
Utilisation de AWS Wrapper JDBC avancé
Si votre application utilise un pilote JDBC pour interroger une base de données relationnelle, vous pouvez implémenter la mise en cache des requêtes à l'aide du plug-in Remote Query Cache de l'Advanced
Comment fonctionne la mise en cache des requêtes avec le plugin
Le plug-in Remote Query Cache permet aux applications Java qui interrogent les bases de données PostgreSQL, MySQL ou MariaDB de mettre automatiquement en cache les résultats des requêtes. ElastiCache Vous configurez le plugin avec les informations de votre point de terminaison du cache et vous indiquez les requêtes de votre code à mettre en cache à l'aide d'indices de requête. Lorsque le plugin détecte une requête suggérée, il renvoie le résultat de la requête depuis le cache s'il est présent (un accès au cache). Si les résultats ne se trouvent pas dans le cache (erreur de cache), le plugin exécute la requête sur la base de données, stocke les résultats dans le cache et renvoie les résultats à votre application afin que la prochaine fois que la requête sera exécutée, les résultats puissent être diffusés depuis le cache.
Conseils de mise en cache
Vous pouvez contrôler les requêtes à mettre en cache en définissant des indices pour chaque requête. Vous pouvez appliquer des indications de requête directement aux chaînes de requête du code de votre application à l'aide d'un préfixe de commentaire :
/* CACHE_PARAM(ttl=300s) */ SELECT * FROM my_table WHERE id = 42
où ttl est le temps de vie en secondes. Vous pouvez également définir des indices de requête dans des instructions préparées à l'aide de frameworks courants tels que Hibernate et Spring Boot.
Conditions préalables
Pour utiliser le plug-in Remote Query Cache dans votre application, vous avez besoin d'un cache ElastiCache pour Valkey ou Redis OSS (les versions sans serveur et basées sur les nœuds sont prises en charge) ainsi que des dépendances suivantes :
-
AWS Advanced JDBC Wrapper
version 3.3.0 ou ultérieure. -
Apache Commons Pool
version 2.11.1 ou ultérieure. -
Valkey Glide
version 2.3.0 ou ultérieure.
Exemple : mise en cache d'une requête avec le plugin
L'exemple suivant montre comment activer le plugin et mettre en cache un résultat de requête pendant 300 secondes (5 minutes) avec un cache sans serveur 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(); } }
La première fois que cette requête est exécutée, le résultat est renvoyé par la base de données et mis en ElastiCache cache. Pendant les 300 secondes suivantes, les exécutions suivantes de cette requête sont diffusées directement depuis le cache.
Ressources connexes
Vous trouverez des exemples plus complets et des informations détaillées sur la configuration du plugin dans la documentation du plugin Remote Query Cache