La caché siempre tiene que tener un límite, por una cuestión de recursos, y por una cuestión de performance. Como ya se ha comentado, muchos sistemas utilizan una caché de demanda basada en el tiempo. Esto significa que el sistema está alerta y periódicamente según un tiempo predefinido, se recolectan los elementos de caché que hayan expirado. Este es uno de los sistemas más generalizados.
En cambio, pretendo poner el límite en el número de recursos almacenados y no en el tiempo de almacenamiento de éstos.
$cacheFile = $this->folder.$this->request;
$dir = opendir($this->folder);
//Si supero el máximo de archivos permitidos, elimino el más viejo
if($this->countFiles() >= $this->limit){
if($this->deleteOldest())
if(file_put_contents($this->folder.$this->request, $buffer));
return true;
}
else{
if(file_put_contents($this->folder.$this->request, $buffer));
return true;
}
De tal manera si se fija un límite, la próxima vez que se solicite un recurso no cacheado, se guardará la caché de este y para no superar el límite, se eliminará el recurso almacenado más antiguo.
Así el sistema siempre tendrá cacheados los recursos que más se soliciten en ese momento.
A diferencia de los otros sistemas basados en el tiempo, que han de estar alerta (consumo de recursos) al tiempo de expiración de los contenidos, en este la caché se va renovando automáticamente dentro de los límites establecidos.
Para que no se vea alterada la integridad de la información en el proceso de refresco y actualización por culpa de la caché, en el backend se programan métodos genéricos que eliminen la caché cada vez que un contenido es modificado, eliminado, o agregado. Este punto no está implementado, pero es el sentido de la caché.
Una posible implementación podría ser el de la creación de un procedimiento almacenado en la BBDD, que se dispare con cualquier consulta insert, update o delete (modificación del contenido) y setee un valor true en un campo determinado, de tal manera que cada vez que la aplicación corre, chequea este valor para saber si debe consumir la caché existente, o, si ésta quedó obsoleta, y el sistema debe descartarla.
Otra posible implementación sería la de poner un método manual en el código del back, que elimine la caché en cada operación CRUD realizada en los modelos.
De esta manera, por seguro el usuario final nunca verá un contenido desactualizado.