Invalidar páginas en la caché de AEM invalidating-cached-pages-from-aem
Al utilizar Dispatcher con AEM, la interacción debe configurarse para garantizar una administración eficaz de la caché. Según el entorno, la configuración también podría aumentar el rendimiento.
Configurar cuentas de usuario de AEM setting-up-aem-user-accounts
La cuenta de usuario predeterminada admin
se utiliza para autenticar los agentes de replicación instalados de forma predeterminada. Cree una cuenta de usuario dedicada para utilizarla con los agentes de replicación.
Para obtener más información, consulte la sección Configurar Replicación y usuarios de transporte de la lista de comprobación de seguridad AEM.
Invalidar la caché de Dispatcher desde el entorno de creación invalidating-dispatcher-cache-from-the-authoring-environment
Un agente de replicación en la instancia de autor de AEM envía una solicitud de invalidación de la caché a Dispatcher cuando se publica una página. Dispatcher actualiza el archivo en la caché a medida que se publica contenido nuevo.
Utiliza el siguiente procedimiento para configurar un agente de replicación en la instancia de autor de AEM. La configuración invalida la caché de Dispatcher al activar la página:
-
Abra la consola Herramientas de AEM. (
https://localhost:4502/miscadmin#/etc
) -
Abra el agente de replicación necesario debajo de Herramientas/replicación/agentes en autor. Puede utilizar el agente de vaciado de Dispatcher instalado de forma predeterminada.
-
Haga clic en Editar y, en la pestaña Configuración, asegúrese de que esté seleccionado Habilitado.
-
(opcional) Para habilitar las solicitudes de invalidación de alias o de rutas de vanidad, seleccione la opción Actualización de alias.
-
En la pestaña Transporte, acceda a Dispatcher introduciendo el URI.
Si está utilizando un agente de vaciado de Dispatcher estándar, probablemente necesite actualizar el nombre de host y el puerto; por ejemplo, https://<dispatcherHost>:<portApache>/dispatcher/invalidate.cache
Nota: Para los agentes de vaciado de Dispatcher, la propiedad URI solo se emplea si utiliza entradas de host virtual basadas en rutas para diferenciar entre conjuntos. Utilice este campo para dirigirse a la granja para invalidarla. Por ejemplo, la granja n.º 1 tiene un host virtual de
www.mysite.com/path1/*
y la granja n.º 2 lo tiene dewww.mysite.com/path2/*
. Puede utilizar una URL de/path1/invalidate.cache
para dirigirse a la primera granja de servidores y/path2/invalidate.cache
para dirigirse a la segunda. Para obtener más información, consulte Utilizar Dispatcher con varios dominios. -
Configure otros parámetros según sea necesario.
-
Haga clic en Aceptar para activar el agente.
También puede acceder y configurar el agente de vaciado de Dispatcher desde la interfaz de usuario táctil de AEM.
Para obtener más información sobre cómo habilitar el acceso a las URL de vanidad, consulte Habilitar el acceso a las URL de vanidad.
Hay dos problemas potenciales con este enfoque:
-
Se debe poder acceder a Dispatcher desde la instancia de creación. Si la red (por ejemplo, el cortafuegos) está configurada de tal manera que el acceso entre los dos está restringido, esta situación puede que no sea el caso.
-
La publicación y la invalidación de la caché se realizan al mismo tiempo. Dependiendo del momento, un usuario puede solicitar una página justo después de haberla eliminado de la caché y justo antes de que se publique la nueva página. AEM devolverá la página antigua y Dispatcher la almacenará en la caché de nuevo. Esta situación es un problema más bien para los sitios grandes.
Invalidar la caché de Dispatcher desde una instancia de publicación invalidating-dispatcher-cache-from-a-publishing-instance
En determinadas circunstancias, se pueden conseguir mejoras en el rendimiento, al transferir la administración de la caché del entorno de creación a una instancia de publicación. A continuación, será el entorno de publicación (no el entorno de creación de AEM) el que envía una solicitud de invalidación de la caché a Dispatcher cuando se reciba una página publicada.
Estas circunstancias incluyen las siguientes:
- Prevenir posibles conflictos de programación entre Dispatcher de AEM y la instancia de publicación (consulte Invalidación de la caché de Dispatcher desde el entorno de creación).
- El sistema incluye varias instancias de publicación que residen en servidores de alto rendimiento y solo una instancia de creación.
Un agente de replicación que opera en la instancia de publicación controla el vaciado de Dispatcher. Sin embargo, la configuración se realiza en el entorno de creación y luego se transfiere activando el agente:
-
Abra la consola Herramientas de AEM.
-
Abra el agente de replicación necesario debajo de Herramientas/replicación/agentes en publicación. Puede utilizar el agente de vaciado de Dispatcher instalado de forma predeterminada.
-
Haga clic en Editar y, en la pestaña Configuración, asegúrese de que esté seleccionado Habilitado.
-
(opcional) Para habilitar las solicitudes de invalidación de alias o de rutas de vanidad, seleccione la opción Actualización de alias.
-
En la pestaña Transporte, acceda a Dispatcher introduciendo el URI necesario.
Si está utilizando un agente de vaciado de Dispatcher estándar, actualice el nombre de host y el puerto; por ejemplo,http://<dispatcherHost>:<portApache>/dispatcher/invalidate.cache
Nota: Para los agentes de vaciado de Dispatcher, la propiedad URI solo se emplea si utiliza entradas de host virtual basadas en rutas para diferenciar entre conjuntos. Utilice este campo para dirigirse a la granja para invalidarla. Por ejemplo, la granja n.º 1 tiene un host virtual de
www.mysite.com/path1/*
y la granja n.º 2 lo tiene dewww.mysite.com/path2/*
. Puede utilizar una URL de/path1/invalidate.cache
para dirigirse a la primera granja de servidores y/path2/invalidate.cache
para dirigirse a la segunda. Para obtener más información, consulte Utilizar Dispatcher con varios dominios. -
Configure otros parámetros según sea necesario.
-
Inicie sesión en la instancia de publicación y valide la configuración del agente de vaciado. Además, asegúrese de que esté habilitado.
-
Repita el proceso para cada instancia de publicación afectada.
Después de configurar, cuando active una página de autor a publicación, este agente iniciará una replicación estándar. El registro incluye mensajes que indican solicitudes procedentes del servidor de publicación, de forma similar al siguiente ejemplo:
<publishserver> 13:29:47 127.0.0.1 POST /dispatcher/invalidate.cache 200
Invalidar manualmente la caché de Dispatcher manually-invalidating-the-dispatcher-cache
Para invalidar (o vaciar) la caché de Dispatcher sin activar una página, puede enviar una petición HTTP a Dispatcher. Por ejemplo, puede crear una aplicación AEM que permita vaciar la caché a los administradores u otras aplicaciones.
La petición HTTP hace que Dispatcher elimine archivos específicos de la caché. De forma opcional, Dispatcher actualiza la caché con una copia nueva.
Eliminar archivos en caché delete-cached-files
Emita una petición HTTP que haga que Dispatcher de AEM elimine archivos de la caché. Dispatcher volverá a almacenar en caché los archivos solo cuando reciba una solicitud de cliente para la página. La eliminación de archivos en caché de esta manera es idónea para sitios web que no reciban solicitudes simultáneas para la misma página.
La solicitud HTTP tiene el siguiente formulario:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
CQ-Handle: path-pattern
Content-Length: 0
Dispatcher descarga (elimina) los archivos en caché y las carpetas que tienen nombres que coinciden con el valor del encabezado CQ-Handler
. Por ejemplo, un CQ-Handle
de /content/geomtrixx-outdoors/en
coincide con los siguientes elementos:
-
Todos los archivos (de cualquier extensión) llamados
en
en el directoriogeometrixx-outdoors
-
Cualquier directorio llamado
_jcr_content
debajo del directorioen
(que, si existe, contiene procesamientos en caché de subnodos de la página)
Todos los demás archivos de la caché de Dispatcher (o hasta un nivel en particular, dependiendo de la configuración /statfileslevel
) se invalidan tocando el archivo .stat
. La fecha de la última modificación de este archivo se comparará con la fecha de la última modificación de un documento almacenado en caché y el documento se recuperará si el archivo .stat
es más reciente. Consulte Invalidación de archivos por nivel de carpeta para obtener más información.
La invalidación (es decir, el contacto de archivos .stat) se puede evitar enviando un encabezado adicional CQ-Action-Scope: ResourceOnly
. Esta funcionalidad se puede utilizar para vaciar recursos concretos. Todo sin invalidar otras partes de la caché, como los datos JSON. Esos datos se crean dinámicamente y requieren vaciado regular independientemente de la caché. Por ejemplo, representar datos que se obtienen de un sistema de terceros para mostrar noticias, cotizaciones bursátiles, etc.
Eliminar archivos y volver a almacenarlos en la caché delete-and-recache-files
Emita una petición HTTP que haga que Dispatcher elimine los archivos en caché, y que recupere y vuelva a almacenar en la caché inmediatamente el archivo. Elimine y vuelva a almacenar en caché inmediatamente los archivos cuando los sitios web reciban solicitudes simultáneas del cliente para la misma página. El almacenamiento inmediato garantiza que Dispatcher recupere y almacene en caché la página solo una vez, en lugar de una vez por cada una de las solicitudes simultáneas del cliente.
Nota: Eliminar y volver a almacenar archivos en la caché solo debe realizarse en la instancia de publicación. Cuando se realiza desde la instancia de autor, las condiciones de carrera se producen cuando se intenta recuperar los recursos antes de publicarlos.
La solicitud HTTP tiene el siguiente formulario:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
`Content-Type: text/plain
CQ-Handle: path-pattern
Content-Length: numchars in bodypage_path0
page_path1
...
page_pathn
Las rutas de página para volver a almacenar archivos en la caché inmediatamente se enumeran en líneas independientes en el cuerpo del mensaje. El valor de CQ-Handle
es la ruta de una página que invalida las páginas que se van a almacenar de nuevo. (Consulte el parámetro /statfileslevel
del elemento de configuración Caché). El siguiente ejemplo de mensaje de solicitud HTTP elimina y vuelve a almacenar en la caché el /content/geometrixx-outdoors/en.html page
:
POST /dispatcher/invalidate.cache HTTP/1.1
CQ-Action: Activate
Content-Type: text/plain
CQ-Handle: /content/geometrixx-outdoors/en/men.html
Content-Length: 36
/content/geometrixx-outdoors/en.html
Ejemplo de vaciado del servlet example-flush-servlet
El siguiente código implementa un servlet que envía una solicitud de invalidación a Dispatcher. El servlet recibe un mensaje de solicitud que contiene parámetros handle
y page
. Estos parámetros proporcionan el valor del encabezado CQ-Handle
y la ruta de acceso de la página a recuperar, respectivamente. El servlet utiliza los valores para construir la solicitud HTTP para Dispatcher.
Cuando se implementa el servlet en la instancia de publicación, la siguiente URL hace que Dispatcher elimine la página /content/geometrixx-outdoors/en.html y, a continuación, almacena en caché una copia nueva.
10.36.79.223:4503/bin/flushcache/html?page=/content/geometrixx-outdoors/en.html&handle=/content/geometrixx-outdoors/en/men.html
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Property;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
@Component(metatype=true)
@Service
public class Flushcache extends SlingSafeMethodsServlet {
@Property(value="/bin/flushcache")
static final String SERVLET_PATH="sling.servlet.paths";
private Logger logger = LoggerFactory.getLogger(this.getClass());
public void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {
try{
//retrieve the request parameters
String handle = request.getParameter("handle");
String page = request.getParameter("page");
//hard-coding connection properties is a bad practice, but is done here to simplify the example
String server = "localhost";
String uri = "/dispatcher/invalidate.cache";
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("https://"+host+uri);
post.setRequestHeader("CQ-Action", "Activate");
post.setRequestHeader("CQ-Handle",handle);
StringRequestEntity body = new StringRequestEntity(page,null,null);
post.setRequestEntity(body);
post.setRequestHeader("Content-length", String.valueOf(body.getContentLength()));
client.executeMethod(post);
post.releaseConnection();
//log the results
logger.info("result: " + post.getResponseBodyAsString());
}
}catch(Exception e){
logger.error("Flushcache servlet exception: " + e.getMessage());
}
}
}