Se si utilizza la versione Zend di php, è facile.
Non è necessario serializzare i dati.
Solo i contenuti possono essere memorizzati nella cache. Risorse come i filehandle non possono. Per memorizzare true/false, utilizzare 1,0 in modo da poter distinguere un errore di cache da un risultato con ===
.
Store:
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
Recupera:
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
Per i dati vissuto a lungo è possibile utilizzare:
zend_disk_cache_store();zend_disk_cache_fetch();
Per quelli senza Zend, le corrispondenti versioni APC di cui sopra:
Store:
apc_store('cache_name',$any_variable,$expire_in_seconds);
Recupera:
$any_variable = apc_fetch('cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
mai usato uno qualsiasi degli altri metodi citati. Se non si dispone di memoria condivisa, è possibile serializzare/unserializzare i dati su disco. memoria Naturalmente condivisa è molto più veloce e la cosa bella di Zend è gestisce problemi di concorrenza per voi e consente spazi dei nomi:
Store:
file_put_contents('/tmp/some_filename',serialize($any_variable));
Retrieve:
$any_variable = unserialize(file_get_contents('/tmp/some_filename'));
Modifica: Per gestire problemi di concorrenza voi stessi, penso che il modo più semplice sarebbe utilizzare il blocco. Posso ancora vedere la possibilità di una condizione di competizione in questo codice psuedo tra il blocco esiste e ottenere il blocco, ma ottieni il punto.
codice Psuedo:
while (lock exists) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.
PHP sé non ha alcun 'contesto di applicazione'. Ci sono soluzioni alternative (vale a dire la memorizzazione di materiale in file o memoria condivisa), ma in caso contrario, nulla sopravvive alla fine dell'esecuzione di uno script PHP. – zneak