Comportamento e uso de estruturas de dados em cache
NCache suporta as estruturas de pares chave-valor onde a chave é um tipo de string contra um valor que pode ser qualquer tipo primitivo, objeto personalizado, Item de cacheou uma estrutura de dados. Grupos, Tags, Expiration, Bloqueio, Dependências, e mais podem ser atribuídos a esses valores.
Note
Este recurso está disponível apenas no NCache Enterprise.
No entanto, atualizar qualquer valor dentro de uma estrutura de dados, digamos uma lista, exigia buscá-lo no cache, atualizá-lo e adicioná-lo novamente ao cache. Isso resultou em chamadas adicionais pela rede. NCache agora eliminou essa restrição fornecendo suporte exclusivo para adicionar/atualizar estruturas de dados manipulando os dados diretamente no servidor. Assim, melhorando o desempenho geral.
NCache fornece suporte explícito para as seguintes estruturas de dados:
- Lista
- Fila
- Conjunto de hash
- Dicionário
- Contador
Além das funções fornecidas pelas interfaces de estrutura de dados nativas, NCache estende sua funcionalidade fornecendo a opção de especificar metadados usando um CacheItem
. Isso significa que as estruturas de dados podem ter Tags, Expiração e Dependência, assim como os demais objetos do cache.
importante
Toda a estrutura de dados residirá em um nó de um cache clusterizado. Por exemplo, se você criar um dicionário de 100 itens, todo o dicionário de 100 itens existirá em um nó e não será distribuído entre outros nós.
A figura a seguir mostra as diversas estruturas de dados em relação às suas respectivas chaves de cache que residem em um cache clusterizado de 3 nós:
Comportamento inteligente
Armazenamento
Qualquer item armazenado em uma estrutura de dados é serializado em JSON para oferecer suporte a operações nativas no servidor, como
Contains
.As estruturas de dados têm seu próprio tamanho junto com os metadados que impactam o tamanho do cache.
Anotação de campo primário
[Campo Primário] a anotação pode ser usada em classes de modelo de usuário para as estruturas de dados, incluindo a Lista e a Fila. As operações de pesquisa nas estruturas de dados, como Contains
, pode ser usado para serializar e enviar apenas esse atributo/propriedade em vez de serializar e transferir o objeto inteiro para o servidor. Apenas o PrimaryField
O atributo será enviado ao servidor e comparado no lado do servidor, diminuindo o custo da operação.
Por exemplo, a Customer
classe contém a propriedade CustomerId
, que é único. Isso pode ser marcado como o PrimaryField
, e em vez de comparar o objeto completo, digamos Contains
, comparando apenas PrimaryField
pode completar a operação.
class Customer
{
[PrimaryField]
public string CustomerId { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
Chaves de cache
As estruturas de dados em NCache são nomeados, ou seja, eles serão armazenados em uma chave de cache como os outros objetos em NCache. Se existir uma chave de cache para um CacheItem
, ele não pode ser usado em uma estrutura de dados.
Recursos pesquisáveis
Atributos pesquisáveis como Grupos, Tags e Tags Nomeadas podem ser especificados em uma estrutura de dados durante sua criação. UMA CacheItem
e uma estrutura de dados pode pertencer ao mesmo grupo/tag/tag nomeada. Para mais detalhes, consulte Configurar atributos pesquisáveis.
Recursos de invalidação de dados
Despejo
Toda a estrutura de dados é removida do cache se estiver na categoria "a ser despejada". A criação da estrutura de dados não apenas leva a uma possível remoção, mas qualquer operação de gravação na estrutura de dados também pode desencadear a remoção. Por exemplo, um item é adicionado à lista de forma que os critérios de despejo sejam atendidos.
Expiration
As estruturas de dados podem ser invalidadas do cache após um intervalo de tempo especificado, assim como um CacheItem
. As estruturas de dados suportam ambos, Expiração Absoluta e Expiração deslizante.
Dependências de cache
As estruturas de dados suportam todas as dependências de cache. Para dependências baseadas em chave, uma lista pode depender de um CacheItem
e vice versa. Para mais detalhes, consulte Configurar atributos de invalidação.
Consultas em estruturas de dados
As estruturas de dados podem ser consultadas no cache se tiverem atributos pesquisáveis configurado. Os atributos pesquisáveis incluem:
- Grupos
- Tags
- Tags nomeadas
Para mais detalhes, consulte Consulta em estruturas de dados.
Provedores de origem de apoio
Leia
Isso ocorre apenas no nível da coleção. As estruturas de dados podem ser lidas diretamente de uma fonte de dados se não forem encontradas no cache. Itens individuais de uma estrutura de dados não serão lidos na fonte de dados. Portanto, toda a lista de itens deve ser obtida da fonte de dados.
Gravação
Write-through é acionado em dois casos:
- Após a criação da estrutura de dados dentro do cache (nível de coleção).
- Após a adição de dados a uma estrutura de dados já existente (nível de item).
Carregador e Atualizador de Cache
Você pode carregar estruturas de dados no cache na inicialização do cache automaticamente, usando o recurso Cache Startup Loader. Isso requer a implementação de uma interface ICacheLoader
com seus métodos. Além disso, se houver alguma alteração ou atualização nos dados, Cache Refresher
é usado para atualizar os dados. Para mais detalhes, consulte Carregador e Atualizador de Cache.
Cache de cliente
A estrutura de dados não é armazenada no cache do cliente. Algum Get operação irá buscá-lo no cache principal, mas não o armazenará no cache do cliente. Para mais detalhes, consulte Cache de cliente. Por exemplo, quando bloqueamos um dicionário, todo o dicionário é bloqueado e nenhuma operação adicional.
Bloqueio
A NCache fornece um mecanismo de bloqueio eficiente para a sincronização de dados e a integridade do armazenamento de cache sendo atualizado por diferentes clientes paralelos. NCacheO bloqueio interno do garante a consistência das estruturas de dados em todo o cluster de cache para cada atualização da mesma estrutura de dados. Por exemplo, inteiro dicionário está bloqueado quando bloqueamos um dicionário.
Notificações de eventos
Os eventos em nível de cache e os eventos baseados em chave são suportados junto com os eventos em nível de estrutura de dados e podem ser registrados juntos em uma estrutura de dados. Por exemplo:
Uma lista é criada no cache. Isso aciona o
ItemAdded
Evento de nível de cache e não o evento de estrutura de dados.Um item é adicionado a esta lista. Isso aciona o
ItemUpdated
Evento de nível de cache, pois a lista foi atualizada e oItemAdded
evento de estrutura de dados como um novo item foi adicionado à lista.
Limitações
- As estruturas de dados aninhadas ainda não são suportadas.
- A
CacheItem
não pode ser armazenado em uma estrutura de dados. Por exemplo, uma lista deCacheItems
ainda não é suportado. - Os objetos personalizados no HashSet ainda não são suportados.
- Uma chave de Dicionário só pode ser do tipo string.
Comportamento Sábio de Topologia
Topologia de espelho
Escolha Topologia de espelho, as operações são executadas no nó ativo. Essas operações são então replicadas para o nó passivo.
Topologia replicada
Escolha Topologia replicada, as operações são executadas no nó ao qual o cliente está conectado, que então replica as operações para todos os nós.
Topologia Particionada
In Topologia Particionada, toda a estrutura de dados existe no mesmo nó. É distribuído com base na chave. Isso significa que não importa o tamanho do dicionário, ele existirá em um nó; o dicionário em si não será particionado entre nós.
Topologia Partição-Réplica
In Topologia Partição-Réplica, as operações se comportam da mesma forma que na topologia particionada. A estrutura de dados é distribuída com base na chave de cache e residirá no mesmo nó. Sua réplica existirá no outro nó.
Veja também
Listar Comportamento e Uso em Cache
Comportamento de fila e uso em cache
Definir comportamento e uso no cache
Comportamento e uso do dicionário no cache
Comportamento do contador e uso em cache