Don't save empty arrays and empty values. Sometimes, you can get wrong apc_exists($someKey) result, that this key doesn't exists.
apc_store
(PECL apc >= 3.0.0)
apc_store — Guarda uma variável no cache
Descrição
Armazena uma variável no cache.
Nota: Ao contrário de muitos outros mecanismos no PHP, variáveis guardadas usando apc_store() persistirão entre requisições (até que o valor seja removido do cache).
Parâmetros
- key
-
Guarda a variável usando esse nome. keys são únicas para cada cache, então, guardar um segundo valor com a mesma key sobrescreverá o valor original.
- var
-
A variável a ser guardada.
- ttl
-
Tempo de vida; guarda var no cache por ttl segundos. Após ttl ter passado, a variável guardada será removida do cache (na próxima requisição). Se ttl não for passado (ou se ttl for 0), o valor persistirá até ser removido manualmente do cache, ou caso deixe de existir no cache (clear, restart, etc.).
Valor Retornado
Retorna TRUE em caso de sucesso ou FALSE em falhas.
Exemplos
Exemplo #1 Um exemplo de apc_store()
<?php
$bar = 'BAR';
apc_store('foo', $bar);
var_dump(apc_fetch('foo'));
?>
O exemplo acima irá imprimir:
string(3) "BAR"
Veja Também
- apc_add() - Cache a variable in the data store
- apc_fetch() - Retorna uma variável guardado do cache
- apc_delete() - Remove uma variável guardado no cache.
apc_store
03-Feb-2012 09:49
08-Dec-2011 11:49
Note that caching resources is not possible; even if the apc cache doesn't seems to call the serialize / unserialize functions, that doesn't means that resources can be cached!
Small non-working example:
<?php
// Setter code
$r = fopen( '/tmp/test.txt', 'r' );
var_dump( $r );
apc_store( 'test', $r );
?>
<?php
// Getter code
$d = apc_fetch( 'test' );
var_dump( $d );
echo fread( $d, 1024 );
?>
var_dump( $d ) returns Resource #n of type (Unknown). The resource is still here, but unavailable.
17-Nov-2010 09:17
It might be interesting to note that storing an object in the cache does not serialize the object, i.e. does not call the __sleep()/__wakeup() or serialize()/unserialize() methods.
24-Aug-2010 10:32
Note APC version 3.1.3 there is a bug (http://pecl.php.net/bugs/bug.php?id=16814) that will display a cache slam averted warning for all writes to a cache var that exists. Slam checking can be disabled by setting apc.slam_defense = 0.
05-Jan-2010 05:40
Note that the TTL only takes effect when you attempt to access the variable again (at least in my version). That is, just issuing a new request to a page won't clear outdated items -- you have to call apc_fetch on that specific item.
If you call apc_info after the TTL of an item it will still be listed.
This is important if you are expecting items to be cleared to conserve memory.
09-Mar-2008 09:53
Note that since APC 3.0.15 or 3.0.16, the time-to-live-feature does not work within the same request (see http://pecl.php.net/bugs/bug.php?id=13331).
01-Mar-2007 03:06
if you want to store array of objects in apc use ArrayObject wrapper (PHP5).
<?php
$objs = array();
$objs[] = new TestClass();
$objs[] = new TestClass();
$objs[] = new TestClass();
//Doesn't work
apc_store('objs',$objs,60);
$tmp = apc_fetch('objs');
print_r($tmp);
//Works
apc_store('objs',new ArrayObject($objs),60);
$tmp = apc_fetch('objs');
print_r($tmp->getArrayCopy());
?>
12-Jan-2007 12:11
be sure that setting FALSE values can be wrong returned from fetch since fetch return FALSE on errors
03-Nov-2006 12:45
Seems to be no (easy) way at the to know how old a value fetched is and to check whether it is out of date.
I've made these wrappers so that you can fetch and store values based on a udt returned from get_last_modified_date() which should return a udt of when your data was last changed, and hence needs junking out of the cache.
<?php
function apc_fetch_udt($key){
$g = apc_fetch($key);
if ($g){
list($udt,$val) = $g;
if (get_last_modified_date()<$udt) {
$val = unserialize($val);
return $val;
} else {
apc_delete($key);
}
}
}
function apc_store_udt($key,$g){
$udt = time();
$g = serialize($g);
$apc = array($udt,$g);
apc_store($key, $apc);
}
?>
30-Oct-2006 01:09
It should be noted that apc_store appears to only store one level deep. So if you have an array of arrays, and you store it. When you pull it back out with apc_fetch it will only have the top level row of keys with nulls as the values of each key.
Solution to this, is to serialize the data before storing it in the cache and unserialize it while retrieving from the cache.

apc_sma_info