Invalidación de memoria caché

Para mantener la aplicabilidad de los datos almacenados en memoria caché, basados en el tiempo, el usuario u otras variables, se tendrán que invalidar o eliminar los datos de la memoria caché. Dynacache proporciona diferentes métodos para realizar la invalidación de memoria caché. Existen cuatro métodos para invalidar la memoria caché.

Invalidación basada en tiempo

La invalidación basada en tiempo es útil cuando las entradas de memoria caché no se pueden invalidar mediante ningún otro mecanismo o se deben renovar después de un periodo establecido. Este método se puede llevar a cabo especificando el subelemento <timeout>value</timeout> con una entrada de memoria caché (cache-entry) en el archivo cachespec.xml. El valor es la cantidad de tiempo, en segundos, durante la cual se conserva la entrada de memoria caché en la memoria. El valor predeterminado para este elemento es 0, que indica que esta entrada no caduca nunca. Para obtener más información sobre cómo utilizar la etiqueta <timeout>, consulte Configuring cacheable objects with the cachespec.xml file.

Un ejemplo en el que tiene sentido utilizar la invalidación basada en tiempo es el almacenamiento en memoria caché de una zona de e-Marketing. En general, las zonas de e-Marketing no se deben almacenar en memoria caché porque la salida de página se genera dinámicamente basándose en datos personalizados. Pero en el caso de que el administrador de tienda desee sacrificar función por rendimiento, las JSP de zona de e-Marketing se pueden almacenar en memoria caché con un subelemento de tiempo de espera, a fin de que la salida se pueda volver a utilizar durante un determinado periodo de tiempo.

Existe también un subelemento de inactividad que se utiliza para especificar un valor de tiempo de vida (TTL) para la entrada de memoria caché basándose en la última vez en que se ha accedido a la entrada de memoria caché. Es un subelemento del elemento ID de memoria caché. <inactivity>valor<inactivity> donde valor es la cantidad de tiempo en segundos durante la cual se debe conservar la entrada de memoria caché en la memoria caché después del último acceso a la memoria caché. Esto es especialmente útil para entradas de memoria caché dependientes de usuario donde la duración media de sesión de usuario se puede especificar como un tiempo de espera de inactividad.

Invalidación basada en mandatos

La invalidación, basada en reglas de invalidación, se produce en la ejecución de un mandato, que se extiende desde la API de infraestructura de mandatos de HCL Commerce. Los ID de invalidación para la invalidación basada en mandatos se crean basándose en los métodos y campos proporcionados por los mandatos.

Para permitir que la memoria caché dinámica intercepte una llamada de mandato, el mandato se debe grabar en la Infraestructura de mandatos de WebSphere en la clase de implementación extendiéndose desde CacheableCommandImpl (en el paquete com.ibm.websphere.command). Para simplificar la grabación de mandatos para la invalidación basada en mandatos, HCL Commerce ha actualizado las clases abstractas, ControllerCommandImpl y TaskCommandImpl. Se extienden desde CacheableCommandImpl para que los mandatos que se extiendan desde estas clases abstractas también se extiendan desde CacheableCommandImpl y, por consiguiente, sean elegibles para la invalidación basada en mandatos.

Cuando cree las políticas de invalidación basados en mandatos en cachespec.xml, tenga en cuenta las siguientes restricciones:

  • En el componente de método sólo se pueden utilizar los métodos llamados por el mandato que devuelven las variables de instancia de entrada.
  • Todos los métodos que se utilizan para crear los ID de invalidación deben proporcionarse en la interfaz de mandatos y deben implementarse.
  • No se puede utilizar el tipo de componente de atributos de petición.

Invalidación de API Dynacache y tabla CACHEIVL

El almacenamiento en memoria caché dinámica de WebSphere Application Server proporciona las clases Java siguientes para soportar la invalidación programática:

  • com.ibm.websphere.cache.DistributedMap
  • com.ibm.wsspi.cache.Cache
  • com.ibm.websphere.cache.Cache

HCL Commerce proporciona un mandato DynaCacheInvalidation, al que el planificador llama periódicamente para procesar los registros de la tabla CACHEIVL y llamar a las clases Java de memoria caché dinámica anteriores de WebSphere Application Server para invalidar las entradas de memoria caché especificadas. De forma predeterminada, el rango de planificación es cada cuatro minutos.

El mandato DynaCacheInvalidation se ejecuta normalmente como un trabajo de planificador, pero también se puede invocar como un mandato de URL. Si necesita borrar manualmente baseCache y todas las memorias caché de objetos de memoria caché de datos, puede utilizar el mandato de URL DynaCacheInvalidation con el parámetro clear=true.

Invalidación basada en grupo

Mediante la utilización de árboles de dependencia puede crear agrupaciones conceptuales de las entradas de memoria caché e invalidar basándose en estos grupos.

Puede especificar identificadores de grupo de memoria caché adicionales para asociar varias entradas de memoria caché con el mismo identificador de grupo en cachespec.xml. No existe ningún límite en el número de identificadores de este tipo -- ID de dependencia, que se pueden definir en una entrada de memoria caché. Puede definir más de un ID de dependencia en la misma entrada de memoria caché y el mismo identificador de dependencia se puede reutilizar en otra entrada de memoria caché. Este mecanismo proporciona un modo cómodo para eliminar todas las entradas de memoria caché relacionadas al mismo tiempo por medio de una regla individual.

A continuación se muestra un ejemplo en el que se han definido el mismo ID de dependencia y el ID de tienda, en cada una de las entradas de memoria caché de página de catálogo. Asimismo, al final, se proporciona una norma de invalidación en la que se genera el ID de invalidación de un modo que se correlaciona con el del ID de dependencia cuando la norma intercepta la llamada de mandato a StoreStyleUpdateCmd. En la ejecución, después de que la memoria caché dinámica haya generado el ID de invalidación, comparará el ID con cada uno de los ID de dependencia para el mismo identificador y valor de las entradas de memoria caché. Todas las entradas de memoria caché de página de catálogo que se agrupan bajo el ID de dependencia se eliminarán.

Ejemplo de invalidación basada en grupo:


<cache-entry>
 <class>servlet</class>
 
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CachedStoreCatalogDisplay.jsp</name>
     . . .
       <dependency-id>storeId
                <component id="storeId"
type="parameter">
                 <required>true</required>
               </component>
  </dependency-id>
</cache-entry>

<cache-entry>
        <class>servlet</class>
       
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CachedTopCategoriesDisplay.jsp</name>
        . . .
        <dependency-id>storeId
                <component id="storeId" type="parameter">
                        <required>true</required>
                </component>
        </dependency-id>
</cache-entry>

<cache-entry>
        <class>servlet</class>
       
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CachedCategoryDisplay.jsp</name>
       
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CategoriesRouter.jsp</name>
        . . .
        <dependency-id>storeId
                <component id="storeId" type="parameter">
                        <required>true</required>
                </component>
        </dependency-id>
</cache-entry>

<cache-entry>
        <class>servlet</class>
       
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CachedProductDisplay.jsp</name>
       
<name>/Tooltech/ShoppingArea/CatalogSection/CategorySubsection/CachedItemDisplay.jsp</name>
        . . .
        <dependency-id>storeId
                <component id="storeId" type="parameter">
                        <required>true</required>
                </component>
        </dependency-id>
</cache-entry>

<cache-entry>
        <class>command</class>
       
<name>com.ibm.commerce.tools.devtools.store.commands.StoreStyleUpdateCmdImpl</name>
        . . .
        <invalidation>storeId
                <component id="getStoreId" type="method">
                        <required>true</required>
                </component>
        </invalidation>
</cache-entry>