Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Data API Builder suportou há muito tempo cache em memória de Nível 1 (L1) e cabeçalhos de pedidos HTTP relacionados com cache como no-store, no-cache, e only-if-cached para influenciar o comportamento da cache.
A cache de nível 2 (L2) estende a cache para além do processo local ao adicionar uma camada de cache distribuída. Com , os resultados em cache podem ser reutilizados em múltiplas instâncias DAB e sobrevivem a reinícios individuais de L2contentores, o que faz com que as implementações sem estado pareçam menos sem estado de todas as formas corretas.
Benefícios do cache de nível 2
Usa cache de nível 2 quando quiseres:
- Partilhe resultados em cache entre instâncias DAB escalonadas
- Reduzir ida e volta à base de dados para leituras repetidas
- Mantenha os recipientes sem estado quentes após reciclagem ou redistribuição
- Melhorar o desempenho para cargas de trabalho com muita leitura
- Participação na cache do espaço de nomes com partições
Configurar as definições de cache em tempo de execução
A cache de nível 2 é configurada globalmente sob runtime.cache. O bloco de cache em tempo de execução permite a cache em cache, define o tempo padrão para viver (TTL) e configura o fornecedor de cache distribuído.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level-2": {
"enabled": true,
"provider": "redis",
"connection-string": "localhost:6379",
"partition": "prod-api"
}
}
}
}
Propriedades em tempo de execução
| Propriedade | Descrição |
|---|---|
enabled |
Permite o suporte à cache globalmente. |
ttl-seconds |
Define o tempo de vida padrão da cache em segundos. |
level-2.enabled |
Ativa a camada de cache distribuída. |
level-2.provider |
Seleciona o fornecedor de cache distribuído. Atualmente redis é suportado. |
level-2.connection-string |
String de ligação para a instância Redis. |
level-2.partition |
Espaço de nomes opcional para teclas Redis e o canal do backplane. Apenas os contentores que usam a mesma partição partilham o mesmo espaço de cache distribuído. |
Configurar o comportamento da cache específico da entidade
As entidades podem sobrepor o comportamento global da cache. Use o bloco de entidade cache para ativar a cache, defina um TTL personalizado e escolha o nível da cache.
{
"entities": {
"Products": {
"source": "dbo.Products",
"cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
},
"Orders": {
"source": "dbo.Orders",
"cache": { "enabled": true, "level": "L1" }
}
}
}
A propriedade cache.level
Use cache.level para controlar quais os níveis de cache que uma entidade utiliza.
| Valor | Descrição |
|---|---|
L1 |
Apenas cache em memória. Rápido e local ao processo DAB atual. |
L1L2 |
Em memória mais cache distribuída. Este nível é o padrão para entidades em cache. |
Se L2 não estiver ativado globalmente, uma entidade configurada com L1L2 comporta-se como L1.
Como funciona L1L2
Sugestão
Resumo; DRL1L2 = Request → L1 → L2 → base de dados → L2 → L1 → Resposta
Por padrão, uma entidade com cache habilitado usa o nível L1L2.
-
L1é o cache na memória específico por processo. -
L2é a camada de cache distribuída, atualmente Redis, mais um backplane para coerência entre instâncias.
Com L1L2, uma pesquisa de cache verifica primeiro L1. Em caso de L1 falha, verifica L2 se a cache de nível 2 está ativada e configurada globalmente. Se a entrada não for encontrada em nenhuma das camadas, o DAB executa a consulta à base de dados. O resultado é então armazenado tanto em L1 como L2em .
Isto significa:
- Pedidos futuros na mesma instância são servidos a partir de locais
L1 - Pedidos noutras instâncias podem ler e
L2promover a entrada para si própriaL1 - Se um contentor reiniciar, um
L1erro seguido de umL2acerto pode ainda evitar uma ida e volta à base de dados
Esta combinação dá-lhe uma cache distribuída quente entre instâncias escalonadas ou recicladas.
Suporte Redis
A Redis é atualmente o fornecedor de cache de nível 2. É bem adequado para este cenário porque suporta:
- Acesso partilhado entre múltiplas instâncias DAB
- Expiração de chaves para cache baseado em TTL
- Leituras e escritas rápidas para cargas de trabalho de alto rendimento
- Coordenação do backplane entre instâncias
Espaços de cache particionados
Use a opção partition opcional para isolar a atividade da cache distribuída. O DAB usa o valor da partição para namespace as chaves Redis e o canal do backplane. Apenas os contentores que partilham a mesma partição participam no mesmo espaço de cache distribuído.
Esta definição é útil quando queres:
- Tráfego separado de produção e não produção
- Isolar inquilinos ou ambientes
- Impedir que serviços não relacionados partilhem entradas em cache