# Limitações

### ⚡ Especificações Técnicas

| Especificação          | Valor                          | Descrição                         |
| ---------------------- | ------------------------------ | --------------------------------- |
| **Limite de Itens**    | 1000 simultâneos               | Cleanup automático quando exceder |
| **TTL Mínimo**         | 1 segundo                      | Tempo mínimo de vida              |
| **TTL Máximo**         | 24 horas (86400s)              | Tempo máximo de vida              |
| **Tamanho de Chave**   | 128 caracteres                 | Máximo permitido                  |
| **Cleanup Automático** | 60 segundos                    | Intervalo de limpeza              |
| **Tipos Suportados**   | string, number, boolean, table | Via JSON para tables              |

### 🚀 Performance Benchmarks

#### Comparação de Performance

| Operação             | Sem Cache  | Com Cache | Melhoria                |
| -------------------- | ---------- | --------- | ----------------------- |
| **Query Database**   | 50-200ms   | 0.1ms     | 500-2000x mais rápido   |
| **API Externa**      | 200-1000ms | 0.1ms     | 2000-10000x mais rápido |
| **Arquivo JSON**     | 10-50ms    | 0.1ms     | 100-500x mais rápido    |
| **Cálculo Complexo** | 5-20ms     | 0.1ms     | 50-200x mais rápido     |

#### Economia de Recursos

```lua
-- ✅ COM CACHE (Recomendado)
-- 1000 players consultando dinheiro:
-- 1ª consulta: 1 query database
-- 999 consultas seguintes: cache (0.1ms cada)
-- Total: 1 query + 999 cache hits = ~100ms

-- ❌ SEM CACHE (Problemático)  
-- 1000 players consultando dinheiro:
-- Todas as consultas: query database (50ms cada)
-- Total: 1000 queries = ~50,000ms (50 segundos!)
```

### 📋 Best Practices e Limitações

#### ✅ Boas Práticas

```lua
-- Usar TTL apropriado para o tipo de dado
LockSystem.Cache.set("player_money", money, 120)        -- Dados que mudam: 2min
LockSystem.Cache.set("server_config", config, 3600)     -- Configurações: 1h
LockSystem.Cache.set("player_country", country, 86400)  -- Dados estáticos: 24h

-- Usar chaves descritivas e organizadas
LockSystem.Cache.set("money_" .. serial, amount, ttl)   -- ✅ Descritiva
LockSystem.Cache.set("perm_admin_" .. serial, hasAdmin, ttl) -- ✅ Categorizada

-- Limpar cache quando dados mudam
function setPlayerMoney(player, amount)
    dbExec(db, "UPDATE players SET money = ?", amount)
    LockSystem.Cache.set("money_" .. getPlayerSerial(player), amount, 120)
end
```

#### ❌ Evitar

```lua
-- Chaves aleatórias ou dinâmicas demais
LockSystem.Cache.set("temp_" .. math.random(), data)    -- ❌ Impossível limpar

-- TTL muito baixo (ineficiente)
LockSystem.Cache.set("data", value, 1)                  -- ❌ Cache de 1 segundo

-- Dados muito grandes
LockSystem.Cache.set("huge_binary", massiveData)        -- ❌ Uso excessivo de memória

-- Não sincronizar com database
function setMoney(player, amount)
    dbExec(db, "UPDATE players SET money = ?", amount)
    -- ❌ Esqueceu de atualizar o cache!
end
```

### 🛡️ Proteções de Segurança

#### Sistema Multi-Camadas

```
🔒 PROTEÇÃO INTEGRADA:

Camada 1: Validação de Acesso
├─ Stack trace validation
├─ Origem de chamada verificada
└─ Blacklist automático para hacks

Camada 2: Criptografia de Chaves  
├─ Hash SHA-like para chaves
├─ Base64 encoding
└─ Prefixos de segurança

Camada 3: Controle de Memória
├─ Limite de 1000 itens
├─ Cleanup automático
└─ Monitoramento de uso

Camada 4: Anti-Tampering
├─ Detecção de modificação
├─ Validação de integridade
└─ Reportes de segurança
```

#### Indicadores de Tentativa de Hack

* **Tentativa de Acesso Direto**: `LockSystem.Cache._storage`
* **Modificação de Timers**: `LockSystem.Cache._timers`
* **Bypass de Validação**: Calls de origens suspeitas
* **Overflow Intencional**: Criação excessiva de cache

### 💡 Resolução de Problemas

#### Problemas Comuns

| Problema                 | Causa Provável              | Solução                            |
| ------------------------ | --------------------------- | ---------------------------------- |
| **Cache não funciona**   | Stack validation bloqueando | Verificar origem da chamada        |
| **Hit rate baixo**       | TTL muito baixo             | Aumentar tempo de cache            |
| **Uso alto de memória**  | Muitos itens cached         | Implementar limpeza personalizada  |
| **Dados desatualizados** | Cache não sincronizado      | Atualizar cache ao modificar dados |

#### Debug de Performance

```lua
-- Verificar se cache está sendo usado corretamente
local stats = LockSystem.Cache.stats()

if stats.hit_rate < 50 then
    print("⚠️ Taxa de acerto baixa - Revisar estratégia de cache")
end

if stats.memory_kb > 10240 then
    print("⚠️ Alto uso de memória - Implementar limpeza")
end

if stats.expired_items > stats.items * 0.3 then
    print("⚠️ Muitos itens expirados - Revisar TTL")
end
```
