🧩 Exercícios: Cache Avançado com Redis e Tags de Cache
Spec Backend Com Php E Laravel • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 15.1 — Operações Básicas com Cache::remember()
Contexto: Operações Básicas com Cache::remember() no contexto de Cache Avançado com Redis e Tags de Cache.
Requisitos de Execução:
- Utilizar
Cache::remember('produtos', 3600, fn() => Produto::all())para consulta com auto-população.
Resultado Esperado
Consulta cacheada por 1 hora no Redis.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_1_SeuNome - Envie na tarefa:
Atividade Cap 15 - Cache Avançado com Redis e Tags de Cache
🔑 Gabarito de Código & Solução Comentada
<?php
// cache_remember.php
use Illuminate\Support\Facades\Cache;
use App\Models\Produto;
$produtos = Cache::remember('produtos:ativos', 3600, function () {
return Produto::where('ativo', true)->get();
});
🔍 Nível 2: Prática
Problema 15.2 — Cache Tags para Invalidação Granular em Lote
Contexto: Cache Tags para Invalidação Granular em Lote no contexto de Cache Avançado com Redis e Tags de Cache.
Requisitos de Execução:
- Gravar dados com
Cache::tags(['produtos', 'categorias'])->put(...)e purgar apenas a tag ‘produtos’.
Resultado Esperado
Tags de cache invalidadas seletivamente sem limpar o Redis inteiro.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_2_SeuNome - Envie na tarefa:
Atividade Cap 15 - Cache Avançado com Redis e Tags de Cache
🔑 Gabarito de Código & Solução Comentada
<?php
// cache_tags.php
use Illuminate\Support\Facades\Cache;
Cache::tags(['produtos', 'catalogo'])->put('prod:10', $produto, 600);
// Invalidação por tag
Cache::tags(['produtos'])->flush();
$executado = true;
\Log::info('Operação corporativa executada com sucesso.');
⚡ Nível 3: Integração
Problema 15.3 — Lock Atômico com Cache::lock() para Prevenção de Concorrência
Contexto: Lock Atômico com Cache::lock() para Prevenção de Concorrência no contexto de Cache Avançado com Redis e Tags de Cache.
Requisitos de Execução:
- Adquirir lock distribuído com
Cache::lock('processar-pagamento-123', 10)->get(callback).
Resultado Esperado
Lock distribuído adquirido e liberado após conclusão do processamento.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_3_SeuNome - Envie na tarefa:
Atividade Cap 15 - Cache Avançado com Redis e Tags de Cache
🔑 Gabarito de Código & Solução Comentada
<?php
// cache_lock.php
use Illuminate\Support\Facades\Cache;
$lock = Cache::lock('faturamento:pedido:100', 10);
if ($lock->get()) {
// Processamento seguro sem concorrência
$lock->release();
}
🏆 Nível 4: Desafio Corporativo
Problema 15.4 — Cache Stamping Prevenção e Driver Redis em Cluster
Contexto: Cache Stamping Prevenção e Driver Redis em Cluster no contexto de Cache Avançado com Redis e Tags de Cache.
Requisitos de Execução:
- Configurar fallback para driver de cache local (APCu/Memcached) e conexão com cluster Redis com Sentinel.
Resultado Esperado
Alta disponibilidade de cache garantida em ambiente corporativo.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_4_SeuNome - Envie na tarefa:
Atividade Cap 15 - Cache Avançado com Redis e Tags de Cache
🔑 Gabarito de Código & Solução Comentada
<?php
// config/database.php (Redis Sentinel)
return [
'redis' => [
'client' => 'phpredis',
'options' => ['cluster' => 'redis'],
],
];