apcu_entry

(PECL apcu >= 5.1.0)

apcu_entry Busca ou gera atomicamente uma entrada de cache

Descrição

apcu_entry(string $key, callable $generator, int $ttl = 0): mixed

Tenta atomicamente encontrar key no cache, se não puder ser encontrado, generator é chamado, passando key como único argumento. O valor de retorno da chamada é então armazenado em cache com o ttl especificado opcionalmente e retornado.

Note: Quando o controle entra em apcu_entry() a trava para o cache é adquirida exclusivamente, ela é liberada quando o controle sai de apcu_entry(): Na verdade, isso transforma o corpo do generator em uma seção crítica, impedindo que dois processos executem os mesmos caminhos de código simultaneamente. Além disso, proíbe a execução simultânea de quaisquer outras funções da APCu, pois irão adquirir a mesma trava.

Warning

A única função APCu que pode ser chamada com segurança por generator é apcu_entry().

Parâmetros

key

Identidade da entrada de cache

generator

Uma função chamável que aceite key como o único argumento e retorne o valor para o cache.

ttl

Tempo de Vida (Time To Live); armazena var no cache por ttl segundos. Depois desses ttl segundos, a variável armazenada será excluída do cache (na próxima requisição). Se nenhum parâmetro ttl for informado (ou se ttl for 0), o valor persistirá até que seja removido do cache manualmente, ou caso deixe de existir no cache (limpeza, reinício, etc.).

Valor Retornado

Retorna o valor armazenado em cache

Exemplos

Example #1 Um exemplo de apcu_entry()

<?php
$config = apcu_entry("config", function($key) {
 return [
   "fruta" => apcu_entry("config.fruta", function($key){
     return [
       "abacaxis",
       "bananas"
     ];
   }),
   "pessoas" => apcu_entry("config.pessoas", function($key){
     return [
      "Marcelo",
      "Pedro",
      "Maria"
     ];
   })
 ];
});

var_dump($config);
?>

O exemplo acima produzirá:

array(2) {
  ["fruta"]=>
  array(2) {
    [0]=>
    string(6) "abacaxis"
    [1]=>
    string(5) "bananas"
  }
  ["pessoas"]=>
  array(3) {
    [0]=>
    string(3) "Marcelo"
    [1]=>
    string(3) "Pedro"
    [2]=>
    string(4) "Maria"
  }
}

Veja Também