HCL Commerce Version 9.1.10.0 or later

HCL Cache dans Redis

Redis est la base de données distante qui stocke les données HCL Cache, et elle est également utilisée pour répliquer les invalidations dans les caches locaux. A des fins d'identification et de résolution des incidents et d'administration, vous devrez peut-être parfois utiliser la ligne de commande Redis pour interroger ou configurer la base de données.

Cette page inclut une liste de commandes et de concepts que vous pouvez trouver utiles lors de l'apprentissage ou de l'identification et de la résolution des incidents liés au système de cache. Pour obtenir une liste complète des commandes, consultez le site Redis.

Ce document suppose que vous avez installé Redis sur le cluster Kubernetes avec les graphiques Bitnami, mais les commandes doivent fonctionner sur toutes les distributions.

Note: La modification du contenu du cache directement sur la base de données Redis peut rompre la cohérence du cache. La façon prise en charge pour fonctionner avec le cache est d'utiliser les API du cache ou du gestionnaire de cache.

Accès à l'interface de ligne de commande Redis (redis-cli)

La ligne de commande Redis est accessible à l'aide de la commande redis-cli dans le conteneur :
kubectl exec -it redis-master-0 -n redis -c redis -- bash
redis-cli
Par exemple, si vous souhaitez exécuter la commande DBSIZE à partir de l'extérieur du conteneur, vous émettez la commande suivante.
kubectl exec -it redis-master-0 -n redis -c redis -- redis-cli DBSIZE

La plupart des commandes Redis s'appliquent uniquement au serveur local. Si vous exécutez un cluster, vous devez d'abord identifier le serveur qui contient le cache.

HCL Cache objets

La dénomination des objets de cache suit la convention {cache-<namespace>-<cachename>}-<type>-<id>.

L'espace de nom vous permet de partager Redis pour plusieurs environnements et de faire la distinction entre les environnements de création et de production. Le préfixe contient également le nom du cache et il est placé entre crochets { }. Pour les environnements de cluster, cela garantit que tout le contenu du cache est créé sur le même nœud. Il s'agit d'une décision de conception à des fins de performances.

Les deux principaux types d'objet sont -data (contenu du cache) et -dep, pour les dépendances. Par exemple :
"{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:depthAndLimit=11,11:UTF-8:requestType=GET"
"{cache-demoqalive-baseCache}-dep-storeId:categoryId:11:10506"
Interrogation du HCL Cache
La commande KEYS peut être utilisée pour inspecter le contenu du cache Redis dans un environnement TEST. Cette commande ne doit pas être utilisée dans un environnement de production, car elle peut verrouiller l'unité d'exécution Redis. En production, utilisez plutôt la commande SCAN (et ses variantes), car elle extrait des données en blocs avec un curseur.
L'interface redis-cli fournit un raccourci pour exécuter la commande SCAN --scan qui suit automatiquement le curseur.
I have no name!@redis-master-0:/$ redis-cli --scan --pattern "{cache-demoqalive-baseCache}-*"
"{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=products:catalogId=11501:contractId=-11005:langId=-1:partNumber=BD-BEDS-0002:storeId=11:UTF-8:requestType=GET"
"{cache-demoqalive-baseCache}-dep-WCT+ESINDEX"
"{cache-demoqalive-baseCache}-dep-storeId:partNumber:11:LR-FNTR-0002"
"{cache-demoqalive-baseCache}-dep-storeId:categoryId:11:10506"
"{cache-demoqalive-baseCache}-dep-storeId:partNumber:11:BD-BEDS-0002"
"{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=products:catalogId=11501:langId=-1:partNumber=LR-FNTR-0002:storeId=11:UTF-8:requestType=GET"
"{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:depthAndLimit=11,11:UTF-8:requestType=GET"
..

Les clés de cache (-data) sont stockées en tant qu'objets HASH et contiennent la valeur mise en cache avec des métadonnées.

La commande HGETALL peut être utilisée pour extraire le contenu d'une entrée de cache :

Par exemple :
127.0.0.1:6379> HGETALL "{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:id=10501,10516:UTF-8:requestType=GET"
 1) "created-by"
 2) "demoqalivequery-app-d7ff6c649-ch78j"
 3) "created-at"
 4) "1636061491787"
 5) "dependencies"
 6) "WCT+ESINDEX;;;WCT+FULL_ESINDEX;;;"
 7) "value"
 8) "\x04\x04\t>0com.ibm.ws.cache.servlet.FragmentComposerMemento\x00\x00\x00\x00P\x00 \x02\x00\x00\x00\n>\x0eattributeBytes\x16\x00>\nattributes\x16\x00>\x11characterEncoding\x16\x00>\x13consumeSubfragments \x00>\x0bcontainsESI \x00>\x0bcontentType\x16\x00>\bcontents\x16\x00>\x15externalCacheFragment\x16\x00>\x14externalCacheGroupId\x16\x00>\x0boutputStyle#\x00\x16\x01B\x01\t>4com.ibm.ws.cache.servlet.CacheProxyRequest$Attribute\xdb\x97\x83\x0cL\xc2!\x1d\x00\x00\x00\x02>\x03key\x16\x00>\x05value\x16\x00\x16\x04;\xff>\x15REST_REQUEST_RESOURCE>\x15/api/v2/categories?id\x01\x00\x00\x01B\x03\x16\x04\t>0com.ibm.ws.cache.servlet.DefaultStatusSideEffect\xe2\xe3\xc1\xc89\x19\x01y\x00\x00\x00\x01>\nstatusCode#\x00\x16\x00\x00\x00\xc8\x04\t>)com.ibm.ws.cache.servlet.HeaderSideEffect\x8a\xc4#[9\xfb\xfc=\x00\x00\x00\x03>\x04name\x16\x00>\x03set \x009\xf4\x16\x00\x16>\x0cContent-Type\x00>\x10application/jsonC\a\xaf!{\"contents\":[{\"name\":\"Kitchen\",\"identifier\":\"Kitchen\",\"shortDescription\":\"Create a kitchen that suits your needs and fits your lifestyle\",\"resourceId\":\"https://www.demoqalive.andres.svt.hcl.com/search/resources/api/v2/categories?storeId=11&id=10516&id=10501&contractId=-11005&langId=-1\",\"uniqueID\":\"10516\",\"parentCatalogGroupID\":\"/10516\",\"thumbnail\":\"/hclstore/EmeraldCAS/images/catalog/kitchen/category/dep_kitchen.jpg\",\"seo\":{\"href\":\"/kitchen\"},\"storeID\":\"11\",\"sequence\":\"5.0\",\"fullImage\":\"/hclstore/EmeraldCAS/images/catalog/kitchen/category/dep_kitchen.jpg\",\"id\":\"10516\",\"links\":{\"parent\":{\"href\":\"/search/resources/api/v2/categories?storeId=11&id=-1\"},\"children\":[\"href: /search/resources/api/v2/categories?storeId=11&id=10518\",\"href: /search/resources/api/v2/categories?storeId=11&id=10517\"],\"self\":{\"href\":\"/search/resources/api/v2/categories?storeId=11&id=10516\"}},\"description\":\"Create a kitchen that suits your needs and fits your lifestyle\"},{\"name\":\"Living Room\",\"identifier\":\"LivingRoom\",\"shortDescription\":\"Bring your living space together with comfort and style\",\"resourceId\":\"https://www.demoqalive.andres.svt.hcl.com/search/resources/api/v2/categories?storeId=11&id=10516&id=10501&contractId=-11005&langId=-1\",\"uniqueID\":\"10501\",\"parentCatalogGroupID\":\"/10501\",\"thumbnail\":\"/hclstore/EmeraldCAS/images/catalog/livingroom/category/dep_livingroom.jpg\",\"seo\":{\"href\":\"/living-room\"},\"storeID\":\"11\",\"sequence\":\"1.0\",\"fullImage\":\"/hclstore/EmeraldCAS/images/catalog/livingroom/category/dep_livingroom.jpg\",\"id\":\"10501\",\"links\":{\"parent\":{\"href\":\"/search/resources/api/v2/categories?storeId=11&id=-1\"},\"children\":[\"href: /search/resources/api/v2/categories?storeId=11&id=10503\",\"href: /search/resources/api/v2/categories?storeId=11&id=10502\",\"href: /search/resources/api/v2/categories?storeId=11&id=10504\"],\"self\":{\"href\":\"/search/resources/api/v2/categories?storeId=11&id=10501\"}},\"description\":\"Bring your living space together with comfort and style\"}]}\x01\x01\x00\x00\x00\x01"
 9) "expiry-at"
10) "1636075891787"
La commande TTL affiche le temps de vie restant pour une entrée. Lorsque le temps arrive à expiration, l'entrée est supprimée par Redis.
127.0.0.1:6379> TTL "{cache-demoqalive-baseCache}-data-/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:id=10501,10516:UTF-8:requestType=GET"
(integer) 13609
Informations sur l'ID de dépendance
Les informations de dépendance sont stockées dans des ensembles qui sont liés aux cache-ids. Redis dispose de plusieurs commandes pour fonctionner sur des ensembles. SCARD affiche la taille de l'ensemble (nombre d'ID de cache liés à l'ID de dépendance).
127.0.0.1:6379> SCARD "{cache-demoqalive-baseCache}-dep-WCT+ESINDEX"
(integer) 9

SMEMBERS répertorie tous les cache-ids pour une dépendance. Cette commande ne doit être utilisée que pour les ID de dépendance de petite taille. Pour les ID de dépendance qui peuvent être liés à un grand nombre de cache-ids, SSCAN doit être utilisé à la place.

127.0.0.1:6379> SMEMBERS "{cache-demoqalive-baseCache}-dep-WCT+ESINDEX"
1) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:depthAndLimit=11,11:UTF-8:requestType=GET"
2) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=urls:storeId=11:identifier=tables:langId=-1:UTF-8:requestType=GET"
3) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=urls:storeId=11:identifier=home:langId=-1:UTF-8:requestType=GET"
4) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=urls:storeId=11:identifier=sleepy-head-elegant-queen-bed-bd-beds-0002:langId=-1:UTF-8:requestType=GET"
5) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=products:contractId=-11005:id=14033,14057,14082,14100,14111,14156,14178,14220:langId=-1:storeId=11:UTF-8:requestType=GET"
6) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=store:DC_PathToken_2=11:DC_PathToken_3=sitecontent:DC_PathToken_4=suggestions:catalogId=11501:langId=-1:contractId=-11005:suggestType=Category:UTF-8:requestType=GET"
7) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=categories:storeId=11:langId=-1:contractId=-11005:id=10501,10516:UTF-8:requestType=GET"
8) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=urls:storeId=11:identifier=beds:langId=-1:UTF-8:requestType=GET"
9) "/search/resources/org.springframework.web.servlet.DispatcherServlet.class:DC_Envtype:DC_PathToken_1=api:DC_PathToken_2=v2:DC_PathToken_3=urls:storeId=11:identifier=luncheon-table-dr-tbls-0001:langId=-1:UTF-8:requestType=GET"

Les ID de dépendance ne définissent pas d'expiration et, conformément à la règle de gestion de la mémoire volatile-lru, ils ne peuvent pas être expulsés, car cela entraînerait des invalidations manquantes.

Le HCL Cache gère également d'autres objets tels que le registre de cache {cache_registry-namespace} et {cache-namespace-cachename}-maintenance qui contiennent des informations utilisées pour la maintenance.

Suppressions
La suppression manuelle d'objets de cache n'est pas recommandée, car elle peut créer des incohérences. Les API de cache s'assurent que les métadonnées et les dépendances sont correctement mises à jour après une opération. La commande FLUSHALL AYSNC est souvent utilisée pour effacer une base de données Redis. Cela efface le cache Redis, mais n'émet pas les messages PUBSUB nécessaires pour les caches locaux. Utilisez l'application CacheManager pour émettre des invalidations et des effacements.

Invalidations

Le HCL Cache s'appuie sur Redis PUBSUB pour distribuer des messages d'invalidation aux conteneurs afin d'effacer les caches locaux. Chaque cache définit son propre sujet pour les invalidations. Le sujet utilise la convention suivante : {cache-<namespace>-<cachename>}-invalidation.

Commande PUBSUB
La commande PUBSUB CHANNELS répertorie tous les sujets avec un abonné actif.
I have no name!@redis-master-0:/$ redis-cli PUBSUB CHANNELS
  1) "{cache-demoqaauth-services/cache/WCSearchFacetDistributedMapCache}-invalidation"
  5) "{cache-demoqalive-services/cache/WCSearchSTADistributedMapCache}-invalidation"
  6) "{cache-demoqalive-services/cache/SearchContractDistributedMapCache}-invalidation"
  7) "{cache-demoqalive-services/cache/WCCatalogGroupDistributedMapCache}-invalidation"
  8) "{cache-demoqaauth-services/cache/WCCatalogGroupDistributedMapCache}-invalidation"
  9) ...
Commmande SUBSCRIBE

Les commandes SUBSCRIBE et PSUBSCRIBE démarrent un programme d'écoute de sujet et peuvent être utilisées pour surveiller les invalidations.

L'exemple suivant utilise PSUBSCRIBE pour s'abonner à tous les caches actifs. L'utilisation de --csv rend la sortie plus lisible.
I have no name!@redis-master-0:/$ redis-cli --csv PSUBSCRIBE "{cache-demoqalive-*}-invalidation"
Reading messages... (press Ctrl-C to quit)
"psubscribe","{cache-demoqalive-*}-invalidation",1
"pmessage","{cache-demoqalive-*}-invalidation","{cache-demoqalive-baseCache}-invalidation","[p:demoqalivecache-app-8597fc98cc-dm2rz]> inv-cache-dep:product:10001"
"pmessage","{cache-demoqalive-*}-invalidation","{cache-demoqalive-baseCache}-invalidation","[p:demoqalivecache-app-8597fc98cc-dm2rz]> inv-cache-dep:product:10002"
Commande PUBLISH
La commande PUBLISH est la contrepartie de la commande SUBSCRIBE. Bien que la commande soit disponible et puisse être utilisée pour publier des messages d'invalidation, la méthode prise en charge et recommandée pour tester les invalidations consiste à utiliser les services REST du gestionnaire de cache. Cela garantit que le format du message est conservé. A des fins de test ou d'apprentissage, vous pouvez publier des invalidations comme suit :
PUBLISH "{cache-demoqaauth-baseCache}-invalidation" product:10002
PUBLISH "{cache-demoqaauth-baseCache1}-invalidation" inv-cache-clear

Les API de cache ajoutent des informations de métadonnées facultatives qui aident à identifier la source des invalidations, l'heure à laquelle elles ont été créées et les consommateurs prévus.

HCL Cache avec mise en cluster Redis

Le HCL Cache prend en charge les clusters Redis. Grâce à l'utilisation de clés HASH, tous les objets appartenant au même cache se voient attribuer le même emplacement. Les emplacements sont affectés à des serveurs principaux uniques.

La commande CLUSTER KEYSLOT peut être utilisée pour extraire l'emplacement d'un cache. Les crochets ({..}) contiennent à la fois l'espace de nom et le nom du cache :

127.0.0.1:6379> CLUSTER KEYSLOT {cache-demoqalive-baseCache}-data-key1
(integer) 2773
127.0.0.1:6379> CLUSTER KEYSLOT {cache-demoqalive-baseCache}-data-key2
(integer) 2773
127.0.0.1:6379> CLUSTER KEYSLOT {cache-demoqalive-customCache}-data-key1
(integer) 13467

La commande CLUSTER dispose d'un certain nombre d'options permettant d'extraire des informations et de configurer le cluster. La commande CLUSTER NODES, par exemple, répertorie les détails du nœud et leurs emplacements affectés. Dans cette liste, vous pouvez voir que la valeur baseCache se trouve sur le nœud 10.0.0.3, tandis que la valeur customCache se trouve sur le nœud 10.0.0.2.

127.0.0.1:6379> CLUSTER NODES
04c1fb6be4b726ab9e628a8839caa0dc641988ac 10.0.0.1:6379@16379 master - 0 1636119372578 2 connected 5461-10922
1af0ba43e61824f6c1c16cc0ee66cd3aa58f792b 10.0.0.2:6379@16379 master - 0 1636119373581 3 connected 10923-16383
54a3ebe113c84ea638d3df7706dbdb8ad2ca5836 10.0.0.3:6379@16379 myself,master - 0 1636119373000 1 connected 0-54601

Vous pouvez également utiliser la commande kubectl get pods -n redis -o wide pour mapper des adresses IP à des pods :

kubectl get pods -n redis -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP           NODE
hcl-commerce-redis-redis-cluster-0   2/2     Running   0          20m   10.0.0.3    gke-perf-cluster-...
hcl-commerce-redis-redis-cluster-1   2/2     Running   0          20m   10.0.0.1    gke-perf-cluster-...
hcl-commerce-redis-redis-cluster-2   2/2     Running   0          20m   10.0.0.2    gke-perf-cluster-...

L'API /cm/cache/redisNodeInfo du gestionnaire de cache affiche également les détails de l'emplacement du cache et du nœud.

Le HCL Cache peut être mis à l'échelle en ajoutant des nœuds supplémentaires. Redis permet également la migration des emplacements, ce qui signifie que vous pouvez sélectionner les caches qui vont avec les serveurs choisis. Pour plus de détails, voir Tutoriel du cluster et Spécification du cluster.