Si está utilizando la versión de php de Zend, es fácil.
No necesita serializar sus datos.
Solo se pueden almacenar en caché los contenidos. Recursos como Filehandles no pueden. Para almacenar verdadero/falso, use 1,0 para que pueda diferenciar una falla de la memoria caché de un resultado con ===
.
tienda:
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
Recuperar:
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
Para los datos de larga vida que puede utilizar:
zend_disk_cache_store();zend_disk_cache_fetch();
Para los que no tienen Zend, las correspondientes versiones de APC de lo anterior:
Tienda:
apc_store('cache_name',$any_variable,$expire_in_seconds);
Recuperar:
$any_variable = apc_fetch('cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
nunca utilizado cualquiera de los otros métodos mencionados. Si no tiene memoria compartida disponible, puede serializar/deserializar los datos en el disco. memoria del compartida por supuesto es mucho más rápido y lo bueno de Zend se maneja problemas de concurrencia para usted y permite espacios de nombres:
tiendas:
file_put_contents('/tmp/some_filename',serialize($any_variable));
Recuperar:
$any_variable = unserialize(file_get_contents('/tmp/some_filename'));
Editar: Para manejar problemas de concurrencia usted mismo, creo que la manera más fácil sería usar el bloqueo. Todavía puedo ver la posibilidad de una condición de carrera en este código de psuedo entre el bloqueo existe y obtener el bloqueo, pero entiendes el punto.
pseudo código:
while (lock exists) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.
PHP en sí no tiene 'contexto de aplicación'. Hay soluciones (es decir, almacenar cosas en archivos o memoria compartida), pero de lo contrario, nada sobrevive al final de la ejecución de un script PHP. – zneak