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

-- ✅ 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

-- 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

-- 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

-- 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

Atualizado