System
Cache System
API unificada e expressiva para diversos backends de armazenamento em cache, otimizada para performance e flexibilidade.
Introdução
O sistema de cache do OfficeGest oferece uma interface consistente para drivers como Redis, Files e Database. A configuração reside em Modules/Common/Config/cache.php e pode ser ajustada via variáveis de ambiente .env.
Arquitetura do Sistema
Recuperar e Guardar Itens
A Facade Cache é a porta de entrada principal.
Cache::get($key, $default = null)
Recupera um valor. Se não existir, retorna null ou o valor default.
// Simples
$value = Cache::get('key');
// Com default
$value = Cache::get('key', 'default_value');
// Com Closure (lazy evaluation)
$value = Cache::get('settings', function () {
return DB::table('settings')->get();
});
Cache::put($key, $value, $seconds)
Armazena um item por um tempo determinado.
// Guardar por 60 segundos
Cache::put('key', 'meu_valor', 60);
// Arrays são serializados automaticamente
Cache::put('user:profile', ['name' => 'Paulo', 'role' => 'admin'], 600);
Cache::remember($key, $seconds, $callback)
Tenta obter do cache. Se não existir, executa a closure, guarda o resultado e retorna. Método mais comum e eficiente.
$users = Cache::remember('all_users', 600, function () {
return DB::table('users')->get();
});
Cache::has($key)
Verifica existência (retorna bool).
Cache::add($key, $val, $sec)
Adiciona apenas se NÃO existir. Retorna true se adicionou (Lock atómico).
Remover Itens
Configuração e Drivers
Configurável via .env. Em produção, prefira Redis.
return [
'default' => envVar('CACHE_DRIVER', 'redis'),
'stores' => [
'file' => [
'driver' => 'file',
'path' => rootPath("_cache/{$server}cache"),
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'prefix' => "{$serverCachePrefix}_cache",
],
],
];
Exemplos Práticos
Casos de uso reais extraídos do código do OfficeGest.
1. Cache de Configurações Externas (WMS)
Evita chamadas de API repetitivas usando remember.
return Cache::remember('wms_configs', 5, function () {
return $this->connection->makeHttpCall(url: "configs");
});
2. Estado de Processamento em Lote
Uso de put e get para gestão de estado mutável.
// Inicializar
Cache::put("batch:123:state", ['status' => 'pending'], 86400);
// Atualizar depois
$state = Cache::get("batch:123:state");
$state['status'] = 'processing';
Cache::put("batch:123:state", $state, 86400);
3. Listas para Dropdowns (Select2)
Cache longo para dados estáticos de base de dados.
$statusTypes = Cache::remember('wmso_select2_status_types', 3600, function () {
return $this->database->from('status_types')->get()->result();
});
Troubleshooting
Não serializa?
Evite salvar objetos com recursos (streams, conexões DB) dentro. O Cache usa serialize() e vai falhar.
Dados antigos?
Lembre-se de usar Cache::forget() quando atualizar o dado original na DB.