APC USER CACHE EN PHP: CÓMO FUNCIONA Y CÓMO UTILIZARLO

APC User Cache, o APCu, es una extensión de php que proporciona un caché en memoria muy rápido y ligero para almacenar datos de la aplicación. Es un array asociativo gigante en RAM compartido entre todos los procesos PHP del servidor, donde se pueden guardar y recuperar variables PHP (strings, arrays, objetos serializables, etc.) con claves de tipo string.h2 style="color:#333; border-bottom:2px solid #0a5; padding-bottom:8px; margin:40px 0 20px;">¿Qué cachea exactamente?
  • Datos de usuario / aplicación (no código PHP compilado).
  • Resultados de consultas a BD que no cambian mucho.
  • Configuraciones cargadas desde archivos.
  • Resultados de funciones caras (cálculos, procesamiento de datos).
  • Objetos completos o arrays grandes que se usan repetidamente.

Ventajas

  • Muy rápido → acceso en memoria sin red (más rápido que Redis/Memcached en un solo servidor).
  • Cero overhead de red (no se necesita servidor externo como Redis).
  • Ideal para hosting compartido o servidores únicos.
  • Reduce drásticamente las consultas a bases de datos.
  • Muy usado en WordPress (con plugins como Redis Object Cache o APCu-specific) para acelerar wp_cache_get/set.

Desventajas

  • No distribuido → solo sirve en un servidor (si tienes load balancer con varios servidores,
  • cada uno tiene su propio APCu → datos no compartidos).
  • Se limpia al reiniciar PHP-FPM (reinicio del servidor web, deploy, etc.).
  • Consume RAM (debes configurarlo bien para no llenar la memoria).

Funciones principales

apcu_store('clave', $valor, $ttl_segundos);     // Guardar
$valor = apcu_fetch('clave');    // Obtener (false si no existe)
apcu_add('clave', $valor);       // Solo si no existe
apcu_delete('clave');       // Borrar
apcu_clear_cache();         // Limpiar todo (cuidado!)
apcu_exists('clave');       // ¿Existe?
apcu_inc('contador', 1);    // Incrementar (útil para contadores)
Ejemplo:

$key = 'config_app';
$config = apcu_fetch($key);

if ($config === false) {
    $config = cargarConfigDeBD(); // consulta pesada
    apcu_store($key, $config, 3600); // 1 hora
}