Diseño de la invalidación de caché para operaciones masivas

Los importadores y los trabajos de sincronización pueden guardar cientos de entradas y términos. Dado que la invalidación automática de entradas de POM Cache borra el almacén completo del sitio actual, eliminarlo una vez por elemento desperdicia E/S y puede vaciar repetidamente trabajo relacionado.

El patrón objetivo es: suprimir únicamente los borrados automáticos redundantes del trabajo y, a continuación, borrar cada sitio y representación afectados una sola vez después de que el lote resulte públicamente coherente.

Prefiere un punto de confirmación a nivel de aplicación

Si controlas el importador, evita modificar globalmente los filtros de POM Cache. Deja que el importador recopile los sitios y las representaciones afectados y, a continuación, llama a los asistentes públicos al final:

$needs_html = false;
$needs_json = false;

foreach ( $items as $item ) {
    my_plugin_import_item( $item );
    $needs_html = true;
    $needs_json = true;
}

if ( $needs_html && function_exists( 'pom_cache_delete_site_cache' ) ) {
    pom_cache_delete_site_cache( 'my_plugin_import_complete' );
}

if ( $needs_json && function_exists( 'pom_cache_json_delete_site_cache' ) ) {
    pom_cache_json_delete_site_cache( 'my_plugin_import_complete' );
}

Esto funciona cuando la propia ruta de importación no activa el borrado automático integrado para cada elemento. Si lo hace, utiliza una puerta de alcance limitado.

Limita la supresión temporal

El filtro compartido de eliminación de sitios recibe un contexto. Suprime únicamente los contextos de importador conocidos mientras un estado de trabajo verificado indique que el lote está abierto:

add_filter(
    'pom_cache_should_delete_site_cache',
    static function ( $allow, $context ) {
        // An importer must never override a veto registered elsewhere.
        if ( ! $allow ) {
            return false;
        }

        $bulk_contexts = array(
            'save_post',
            'post_change',
            'set_object_terms',
            'term_change',
        );

        if (
            in_array( $context, $bulk_contexts, true )
            && my_plugin_current_job_defers_cache()
        ) {
            return false;
        }

        return true;
    },
    10,
    2
);

La función de estado del trabajo no debe depender de una bandera de solicitud no confiable. Vincúlala a un trabajador autenticado, a un comando, a un bloqueo o a un registro de importación duradero.

Trabajos que abarcan varias solicitudes

Para colas en segundo plano:

  1. crea un registro de trabajo duradero con los ID de blog afectados y los almacenes requeridos;
  2. marca el aplazamiento como activo antes de la primera mutación;
  3. actualiza el progreso de forma idempotente;
  4. al completarse correctamente, borra una vez por cada blog afectado;
  5. al cancelarse, agotarse el tiempo o producirse un fallo, borra también antes de liberar el aplazamiento;
  6. proporciona una acción de recuperación autorizada que borre las cachés y cierre un trabajo varado.

Una variable estática de PHP o una bandera en memoria desaparece después de una solicitud y no puede proteger una cola de forma segura.

Multisitio

Elimina los ID de blog duplicados. Para cada sitio autorizado, cambia el contexto, borra HTML y/o JSON con un contexto de finalización personalizado y restaura el blog original. No utilices una eliminación recursiva del sistema de archivos en red.

Evita estos patrones

  • Devolver false para cada eliminación de forma indefinida.
  • Bloquear los borrados de recuperación manual o manual_ajax.
  • Llamar a flush_rewrite_rules() por cada elemento importado.
  • Borrar una CDN antes de que la importación alcance un estado de origen coherente.
  • Purgar únicamente HTML cuando el JSON progresivo contiene los mismos datos modificados.
  • Volver a habilitar la entrega pública antes de que el borrado final se complete correctamente.

Valida el lote

Una vez finalizado, solicita páginas singulares representativas, archivos, idiomas, facetas y lotes progresivos. Confirma que el origen haya regenerado los datos actuales y, a continuación, invalida los objetos de CDN exactos o el grupo de rutas aprobado.