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.
Accès à l'interface de ligne de commande Redis (redis-cli)
kubectl exec -it redis-master-0 -n redis -c redis -- bash
redis-clikubectl exec -it redis-master-0 -n redis -c redis -- redis-cli DBSIZELa 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.
-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
--scanqui 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'objetsHASHet 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) 9SMEMBERS 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}-maintenancequi 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--csvrend 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-clearLes 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.