Cache
- Configuração
- Uso do Cache
- Incrementação & Decrementação
- Marcações de Cache
- Cache Events
- Cache no banco de dados
- Memcached Cache
- Redis Cache
Configuração
O Laravel fornece uma API unificada para vários sistemas de cache. A configuração do cache do laravel fica em config/cache.php
. Neste arquivo você pode especificar o driver que você gostaria de usar por padrão em toda a sua aplicação. O Laravel suporta ferramentas como Memcached e Redis.
O arquivo de configuração do cache também contém várias outras opções, que são documentadas dentro do arquivo. Sendo assim, certifique-se de ler estas opções. Por padrão, o Laravel é configurado para usar o drive file
, que armazena objetos serializados no sistema de arquivos. Para grandes aplicações, recomenda-se que você utilize uma cache de in-memory(Verificar esse termo) como Memcached ou APC. Você pode ter várias configurações de cache para o mesmo driver.
Antes de usar o Redis com o Laravel, vc precisará instalar o pacote predis/predis
(~1.0) via Composer.
Uso do Cache
Gravando um item no Cache
Cache::put('key', 'value', $minutes);
Usando objetos do Carbon para a expiração
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);
Gravando um item no Cache caso ele não exista
Cache::add('key', 'value', $minutes);
O método add
retornará true
se o item foi realmente adicionado para o cache. Caso contrário, retornará false
.
Verificando se um Cache existe
if (Cache::has('key'))
{
//
}
Recuperando um item do Cache
$value = Cache::get('key');
Recuperando um item ou retornando um valor default
$value = Cache::get('key', 'default');
$value = Cache::get('key', function() { return 'default'; });
Gravando um item no Cache permanentemente
Cache::forever('key', 'value');
Algumas vezes você pode querer recuperar um item do cache, mas também armazenar um valor default se o item requisitado não existir. Você pode fazer isto utilizando o método Cache::remember
:
$value = Cache::remember('users', $minutes, function()
{
return DB::table('users')->get();
});
Você também pode combinar os métodos remember
e forever
:
$value = Cache::rememberForever('users', function()
{
return DB::table('users')->get();
});
Note que todos os itens gravados no cache são serializados, neste caso, você fica livre para armazenar qualquer tipo de dado.
Puxando um item do Cache
Se você precisar recuperar um item do cache e, em seguida, deletá-lo, você pode usar o método pull
:
$value = Cache::pull('key');
Removendo um item do Cache
Cache::forget('key');
Access Specific Cache Stores
When using multiple cache stores, you may access them via the store
method:
$value = Cache::store('foo')->get('key');
Incrementando & Desincrementando
Todos os drivers, exceto database
, suportam as operações increment
e decrement
:
Incrementando um valor
Cache::increment('key');
Cache::increment('key', $amount);
Desincrementando um valor
Cache::decrement('key');
Cache::decrement('key', $amount);
Marcações de Cache
Nota: As marcações de cache, não são suportadas quando se usam os drivers
file
oudatabase
. Além disso, quando usamos várias marcações em caches que são armazenados "para sempre", o desempenho será melhor com um driver comomemcached
, que limpa automaticamente registros obsoletos.
Acessando um Cache com uma marcação
As marcações, permitem que você marque os items relacionados ao cache, em seguida, limpe todos os caches marcados com um nome dado. Para acessar um cache marcado, use o método tags
.
Você pode armazenar um cache passando um array dos nomes das marcações como argumentos ou como um array com os nomes das marcações:
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags(['people', 'artists'])->put('Anne', $anne, $minutes);
Você pode usar qualquer método de armazenamento de cache em combinação com as marcações, incluindo remember
, forever
e rememberForever
. Você também pode acessar itens que estão no cache oriundos das marcações de cache, também pode usar outros métodos de cache como increment
e decrement
.
Acessando items em um Cache marcado
Para acessar um cache marcado, passe o array das tags usadas anteriormente para armazenar.
$anne = Cache::tags('people', 'artists')->get('Anne');
$john = Cache::tags(['people', 'authors'])->get('John');
Você pode limpar todos os itens marcados com um nome ou array de nomes. Por exemplo, nesta declaração removeremos todas as marcações de cache com people
, author
ou ambos. Então, "Anne" e "John" seriam removidos do cache:
Cache::tags('people', 'authors')->flush();
Sendo assim, este outro código removerá somente caches marcados com authors
. Então "John" será removido, mas "Anne", não.
Cache::tags('authors')->flush();
Eventos Cache
Para executar código em todas as operações de cache, você pode escutar (ou rastrear, procurar) por eventos disparados pelo cache:
Event::listen('cache.hit', function($key, $value) {
//
});
Event::listen('cache.missed', function($key) {
//
});
Event::listen('cache.write', function($key, $value, $minutes) {
//
});
Event::listen('cache.delete', function($key) {
//
});
Cache do banco de dados
Quando usar o drive de cache database
, você precisará configurar uma tabela no que contém os itens do cache. Veja um exemplo Schema
abaixo:
Schema::create('cache', function($table)
{
$table->string('key')->unique();
$table->text('value');
$table->integer('expiration');
});
Memcached Cache
Usar o Mencached cache requere que o Pacote Memcached PECL seja instalado.
Por padrão configuração usa TCP/IP baseado no Memcached::addServer: 'memcached' => array( array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), ),
Você pode também definir a opção host
para um caminho de socket UNIX. Se você fizer isto, a opção port
deve ser definida com o valor 0
:
'memcached' => array(
array('host' => '/var/run/memcached/memcached.sock', 'port' => 0, 'weight' => 100),
),
Cache Redis
Veja Configuração Redis