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:

  1. 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)

  1. Salve o arquivo como: Atividade_15_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_15_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_15_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_15_4_SeuNome
  2. 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'],
    ],
];