Utilisation du cache de l'organisation et de la session
Objectifs de formation
Création d'une partition
Pour pouvoir utiliser le Cache de la plate-forme, commencez par configurer une partition. Une fois configurée, vous pouvez ajouter, accéder à et retirer des données dans la partition en utilisant l'API Apex Cache de la plate-forme.
Chaque partition inclut un segment de cache de session et un segment de cache d'organisation. Vous pouvez allouer des capacités différentes à chaque segment. Généralement, vous allouez à votre partition au moins 5 Mo. Dans l'exemple présent, vous n'allouez aucun espace pour vous assurer que votre code gère correctement les échecs d'accès au cache. Lorsqu’aucun espace n’est alloué, le taux d’échec d’accès au cache est de 100 %, ce qui signifie que les valeurs ne sont pas retrouvées dans le cache, et la méthode get() renvoie null. Utilisez cette technique pour tester les échecs d'accès au cache. Nous présenterons la gestion des échecs d'accès au cache dans une prochaine section.
Pour commencer, créez une partition depuis la page Cache de la plate-forme (disponible uniquement dans Salesforce Classic).
- Dans Configuration, saisissez Cache de la plate-forme dans la case Recherche rapide, puis sélectionnez Cache de la plate-forme.
- Cliquez sur Nouvelle partition cache de la plate-forme.
- Saisissez un nom pour la partition (par exemple le nom de votre application).
- Cochez la case Partition par défaut.
- Saisissez 0 pour le cache de la session et 0 pour le cache de l’organisation, puis cliquez sur Enregistrer.
Format de nom de clé du cache
Chaque clé de cache respecte le format suivant :
Namespace.Partition.Key
Namespace correspond à l’espace de noms de l’organisation dans laquelle l’application est exécutée, qui peut également être défini avec le nom spécial « local ». Le nom « local » désigne l'espace de noms de votre organisation, qu'un espace de noms soit défini ou non.
Partition désigne le nom de la partition que vous créez. Dans cet exemple, le nom de la partition est CurrencyCache.
Key désigne le nom de la clé que vous avez utilisée pour stocker une valeur. Le nom de clé est unique et représente votre valeur mise en cache.
Supposons que vous souhaitez stocker le taux de change entre les devises Dollar US et Euro. Vous créez une clé nommée DollarToEuroRate. Pour la partition que nous venons de créer, le nom complet de la clé est :
local.CurrencyCache.DollarToEuroRate
Par exemple, cet extrait de code stocke une valeur dans le cache de l'organisation pour la clé DollarToEuroRate.
Cache.Org.put('local.CurrencyCache.DollarToEuroRate', '0.91');
La partition que nous avons créée correspond à la partition par défaut. Par conséquent, nous pouvons omettre l'espace de noms et le nom de la partition, et spécifier uniquement le nom de clé.
DollarToEuroRate
Lors de l'utilisation d'une partition par défaut, vous pouvez raccourcir l'appel put() comme suit :
Cache.Org.put('DollarToEuroRate', '0.91');
Stockage et récupération de données dans le cache de l'organisation
Lorsque vous avez configuré des partitions, vous avez effectué la seule étape requise dans l'interface utilisateur. Vous pouvez maintenant passer à Apex pour gérer le cache. Utilisez le cache de l'organisation afin de stocker les données disponibles pour tous les utilisateurs de l'organisation. Utilisez les méthodes de classe Cache.Org ou la classe Cache.OrgPartition pour référencer une partition spécifique. Appelez ensuite les méthodes de cache sur cette partition.
L’extrait de code Apex ci-dessous montre comment accéder à une partition en utilisant la classe Cache.OrgPartition afin de stocker et récupérer une valeur en cache pour une application de taux de change. Il obtient la partition nommée CurrencyCache dans l'espace de noms local. Une nouvelle valeur ajoutée avec la clé DollarToEuroRate et le taux de change de devise du jour. Ensuite, la valeur de la clé DollarToEuroRate est récupérée depuis le cache.
// Get partition Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache'); // Add cache value to the partition. Usually, the value is obtained from a // callout, but hardcoding it in this example for simplicity. orgPart.put('DollarToEuroRate', '0.91'); // Retrieve cache value from the partition String cachedRate = (String)orgPart.get('DollarToEuroRate');
Si vous gérez les valeurs en cache dans une seule partition, utilisez les méthodes Cache.OrgPartition. Les méthodes Cache.OrgPartition sont plus faciles à utiliser que les méthodes Cache.Org, car vous spécifiez une seule fois l’espace de noms et le préfixe de la partition lorsque vous créez l’objet partition.
Les valeurs mises en cache sont-elles permanentes ?
L'exemple précédent correspond à un scénario idéal, à savoir :
- Le Cache de la plate-forme est activé et contient une partition avec un espace disponible
- La valeur mise en cache est retrouvée dans le cache
- La valeur est stockée avec succès dans le cache
Néanmoins, en réalité les données mises en cache ne sont pas toujours garanties. Le Cache de la plate-forme est conçu comme un espace temporaire. Il peut par exemple expirer. Même s'il est actif, les données mises en cache peuvent être expulsées. De la même façon que les écureuils nettoient leurs bajoues pour ajouter d'autres glands, le Cache de la plate-forme libère de l'espace pour des données supplémentaires ! Lorsque la limite de la partition est dépassée, Salesforce expulse des données mises en cache à l'aide d'un algorithme Dernier récemment utilisé (LRU). Le cache est libéré jusqu'à ce que l'utilisation soit inférieure ou égale à 100 % de la capacité. De plus, si vous dépassez la limite en cache locale, les éléments peuvent être expulsés avant même que la requête soit validée.
Durée de vie et expiration des données mises en cache
Le délai de conservation des données en cache est appelé Valeur de durée de vie (ttlsecs). Vous spécifiez la valeur de durée de vie lors du stockage d'une paire clé-valeur dans le cache à l'aide de méthodes Apex. Pour le cache de la session, vos données peuvent résider en cache pendant 8 heures. Pour le cache de l'organisation, vos données peuvent résider en cache pendant 48 heures. La valeur de durée de vie par défaut est de 24 heures pour le cache de l'organisation.
Le cache de la session expire lorsque la valeur de durée de vie spécifiée est atteinte ou lorsque la session utilisateur expire, selon le premier de ces événements. Le cache de l'organisation expire lorsque la valeur de durée de vie spécifiée est atteinte.
Meilleures pratiques de gestion des échecs d'accès au cache
Les meilleures pratiques recommandent d'anticiper et de gérer dans votre code les points de défaillance. En d'autres termes, tenez compte des échecs d'accès au cache éventuels. Un échec d'accès au cache se produit lorsque la valeur d'une clé que vous demandez est introuvable dans le cache. La valeur que votre appel get() renvoie est nulle. Examinez les résultats nuls de l’appel get() et gérez-les en conséquence. Par exemple, si le résultat est nul, récupérez la valeur dans la base de données ou avec un appel d’API.
L’extrait de code Apex suivant indique comment gérer un échec d’accès au cache en vérifiant si la valeur renvoyée depuis le cache n’est pas nulle (if (cachedRate != null)). Si la valeur n’est pas nulle, vous pouvez l’utiliser par exemple pour l’afficher dans une page. Sinon, récupérez cette valeur depuis une autre source telle qu'un appel API ou depuis Salesforce.
Cache.OrgPartition orgPart = Cache.Org.getPartition('local.CurrencyCache'); String cachedRate = (String)orgPart.get('DollarToEuroRate'); // Check the cache value that the get() call returned. if (cachedRate != null) { // Display this exchange rate } else { // We have a cache miss, so fetch the value from the source. // Call an API to get the exchange rate. }
Stockage et récupération de données dans le cache de la session
Vous vous souvenez de la nature du cache de la session ? Correct, il stocke les données associées aux sessions utilisateur individuelles. Vous pouvez par exemple utiliser le cache de la session dans une application pour stocker la devise favorite ou l'ordre des onglets de navigation personnalisé d'un utilisateur. Avec le cache de la session, vous pouvez gérer les valeurs en cache dans un code Apex et lire les valeurs mises en cache avec une variable globale Visualforce.
Avec Apex, la gestion du cache de la session est similaire à la gestion du cache de l'organisation, mais les noms de classe sont différents. Utilisez les classes Cache.Session et Cache.SessionPartition pour accéder à des valeurs stockées dans le cache de la session. Pour gérer les valeurs d’une partition, utilisez les méthodes de la classe Cache.Session. Si vous gérez des valeurs en cache dans une seule partition, utilisez à la place les méthodes Cache.SessionPartition. Les méthodes Cache.SessionPartition sont plus faciles à utiliser que les méthodes Cache.Session, car vous spécifiez une seule fois l’espace de noms et le préfixe de la partition lorsque vous créez l’objet partition.
L'extrait de code Apex suivant montre comment accéder à une partition pour stocker et récupérer une valeur en cache. Il obtient la partition nommée CurrencyCache dans l'espace de noms local. Une nouvelle valeur est ajoutée avec la clé FavoriteCurrency. La valeur de la clé FavoriteCurrency est récupérée. La clé FavoriteCurrency stocke la devise favorite de l'utilisateur. Ainsi, cette valeur est différente pour chaque utilisateur et représente un bon candidat pour le cache de la session.
// Get partition Cache.SessionPartition sessionPart = Cache.Session.getPartition('local.CurrencyCache'); // Add cache value to the partition sessionPart.put('FavoriteCurrency', 'JPY'); // Retrieve cache value from the partition String cachedRate = (String)sessionPart.get('FavoriteCurrency');
Accès au Cache de la plate-forme à l'aide de variables globales Visualforce
Accédez aux valeurs mises en cache stockées dans le cache de la plate-forme à partir d’une page Visualforce en utilisant la variable globale $Cache.Session ou $Cache.Org. En utilisant ces variables globales, vous pouvez lire les valeurs mises en cache qui ont été stockées avec Apex directement depuis votre page Visualforce.
Avec la variable globale $Cache.Session, utilisez le nom de clé qualifié complet contenant l’espace de noms et le nom de la partition. L’exemple ci-dessous est un composant de texte de sortie qui récupère une valeur mise en cache depuis l’espace de noms ExPro, la partition CurrencyCache et la clé FavoriteCurrencyRate.
<apex:outputText value="{!$Cache.Session.ExPro.CurrencyCache.FavoriteCurrencyRate}"/>
Contrairement aux méthodes Apex, vous ne pouvez pas omettre le préfixe namespace.partition pour référencer la partition par défaut dans l’organisation. Si aucun espace de noms n’est défini pour l’organisation, utilisez local pour référencer l’espace de noms de l’organisation dans laquelle le code est exécuté.
<apex:outputText value="{!$Cache.Session.local.MyPartition.Key}"/>
Si la valeur mise en cache est une structure de données contenant des propriétés ou des méthodes, par exemple une liste Apex ou une classe personnalisée, accédez à ces propriétés dans l’expression $Cache.Session en utilisant une notation par point. Par exemple, le balisage ci-dessous invoque la méthode Apex List.size() si la valeur de numbersList est déclarée en tant que liste.
<apex:outputText value="{!$Cache.Session.local.MyPartition.numbersList.size}"/>
Cet exemple accède à la propriété value dans la valeur en cache myData qui est déclarée en tant que classe personnalisée.
<apex:outputText value="{!$Cache.Session.local.MyPartition.myData.value}"/>
Protection de l'allocation de cache pour les applications d'éditeur de logiciels
Le cache de la plate-forme accélère l'exécution et accroît les performances des applications d'éditeur de logiciels. Si vous êtes développeur de logiciels, vous pouvez garantir un espace de mémoire cache pour vos applications en achetant un espace de cache pour votre propre espace de noms. Ainsi, lorsque votre application est installée dans une organisation abonnée, l'espace de cache de votre application n'est pas affecté par l'utilisation de la mémoire cache dans cette organisation. Seul un code Apex exécuté dans l'espace de noms de votre application peut accéder et utiliser le cache de votre espace de noms. Aucun autre code de l'organisation abonnée ne peut utiliser ce cache. Vous pouvez tester le cache de votre espace de noms dans votre application et vérifier que l'allocation de cache est protégée dans chaque organisation abonnée.
Les partitions de cache sont distribuées aux abonnés dans le cadre du package de l'application. Ajoutez à votre package une ou plusieurs partitions de cache en tant que composants pour votre espace de noms, en procédant de la même façon que lorsque vous ajoutez d'autres composants. Les partitions de cache ne sont pas automatiquement ajoutées en tant que composants dépendants.
Le diagramme suivant montre un exemple de capacité en cache d'une organisation abonnée Enterprise Edition dans laquelle un package contenant un cache a été installé. La capacité en cache totale de l'abonné de 30 Mo est divisée en trois partitions combinant un cache de session et un cache d'organisation. La capacité en cache empaquetée provient du package installé dans l'organisation de l'abonné et contient deux partitions. Le cache empaqueté représente 20 Mo de cache que l'éditeur de logiciel a acheté (retenez que seul le code Apex du package peut accéder au cache empaqueté et que le code de l'organisation de l'abonné ne peut pas utiliser ce cache).
Achetez le cache de votre espace de noms dans l’application de commande de canaux. Vous pouvez acheter du cache par blocs de 10 Mo. Pour déterminer la quantité d'espace cache dont vous avez besoin, testez vos applications avec vos partitions de cache. Utilisez un cache d'évaluation pour augmenter la capacité en cache dans votre organisation. Comme indiqué dans la première unité, certaines éditions d'organisation abonnées reçoivent une allocation de cache par défaut. Pour l'organisation Developer Edition dans laquelle vous développez des applications, vous pouvez demander 10 Mo de cache d'évaluation. Vous pouvez demander une augmentation du cache d'évaluation accordé à votre organisation en contactant Salesforce. En essayant différentes tailles de cache, vous pouvez déterminer la quantité de cache à acheter pour votre propre espace de noms.
Nous avons vu comment obtenir et stocker des valeurs dans le Cache de la plate-forme. Faites maintenant vos propres essais ! Relevez le défi ci-dessous pour tester vos connaissances.
Ressources
Ressources disponibles dans le guide du développeur Apex :
Ressources disponibles dans l’aide Salesforce : Mise en cache des données Lightning Platform