Conectividade de Cache
Depois de configurar com sucesso NCache, você pode começar a desenvolver aplicativos utilizando NCache incorporando NCache Chamadas de API. Para fazer isso, você precisa garantir a conectividade do cache. Caches únicos ou múltiplos podem ser conectados em uma única aplicação. Além disso, o cache pode ser conectado com credenciais de segurança.
Note
Este recurso também está disponível em NCache Professional.
Pré-requisitos para conectividade de cache
- Para aprender sobre os pré-requisitos padrão necessários para trabalhar com todos os NCache recursos do lado do cliente, incluindo conectividade de cache, consulte a página fornecida em Pré-requisitos da API do lado do cliente.
- Para obter detalhes da API, consulte: ICache, CacheManager, Obter Cache, CacheConnectionOptions.
Conecte-se ao Cache Único
NCache fornece ICache
interface para obter uma instância de NCachecache. Além disso, o CacheManager
classe permite que você se conecte à instância de cache por meio do GetCache
método.
O exemplo a seguir se conecta a um cache chamado demoCache que está em estado de execução.
// Specify the cache name
string cacheName = "demoCache";
// Connect to cache
ICache cache = CacheManager.GetCache(cacheName);
Note
Para garantir que a operação seja à prova de falhas, é recomendável lidar com possíveis exceções em seu aplicativo, conforme explicado em Como lidar com falhas.
Conecte-se a vários caches
Com o GetCache
método, você pode se conectar a vários caches em um único aplicativo. Isso ajudará você a gerenciar os dados de vários caches usando um aplicativo.
O exemplo a seguir se conecta a dois caches, demoCache e demoClusteredCache do mesmo cliente.
// Specify cache names
string cacheName1 = "demoCache";
string cacheName2 = "demoClusteredCache";
// Connect to the caches
ICache cache1 = CacheManager.GetCache(cacheName1);
ICache cache2 = CacheManager.GetCache(cacheName2);
Conecte-se ao cache usando CacheConnectionOptions
CacheConnectionOptions
permite especificar valores de propriedades de cache ao estabelecer uma conexão com o cache. Esses valores são os mesmos que podem ser configurados através cliente.ncconf arquivo.
Note
Qualquer configuração especificada por CacheConnectionOptions
substituirá o valor em cliente.ncconf para esse cliente específico.
Neste exemplo, os valores do RetryInterval
, ConnectionRetries
, EnableKeepAlive
e KeepAliveInterval
propriedades podem ser alteradas. Para esta aplicação, esses valores serão usados em vez daqueles especificados no arquivo de configuração do cliente.
// Create new CacheConnectionOptions instance
var options = new CacheConnectionOptions();
// Specify the cache connection options to be set
options.RetryInterval = TimeSpan.FromSeconds(5);
options.ConnectionRetries = 2;
options.EnableKeepAlive = true;
options.KeepAliveInterval = TimeSpan.FromSeconds(30);
// Specify the cache name
string cacheName = "demoCache";
// Connect to cache with CacheConnectionOptions
ICache cache = CacheManager.GetCache(cacheName, options);
Conecte-se ao cache usando CacheConnectionOptions para Load Balancer
Muitas vezes, as implantações de aplicativos empregam balanceadores de carga para evitar que as solicitações sobrecarreguem os servidores, ou seja, impedir que os clientes acessem os servidores diretamente. Nessas circunstâncias, para garantir que seu cluster se conecte a todos os servidores, NCache oferece o IsLoadBalancer
API, conforme demonstrado abaixo:
CacheConnectionOptions cacheConnectionOptions = new CacheConnectionOptions();
cacheConnectionOptions.ServerList = new List<ServerInfo>()
{
new ServerInfo("20.200.20.40", 9800, true)
};
ICache cache = CacheManager.GetCache("demoCache", cacheConnectionOptions);
Note
Saiba mais sobre como NCache lida com esses balanceadores de carga SUA PARTICIPAÇÃO FAZ A DIFERENÇA.
Conecte-se ao cluster e ao cache do cliente
Note
Com o GetCache
método para conectar-se ao cluster e ao cache do cliente em uma única chamada não é uma abordagem recomendada.
É possível conectar-se ao cluster e ao cache do cliente em uma única chamada usando o GetCache
método. Isso inicializará ambos os caches em um único aplicativo, ajudando você a gerenciar os dados de vários caches por meio de um aplicativo.
Note
Se o cache local estiver conectado ao Cache do Cliente, a serialização deverá ser igual à do cache clusterizado. Ambos os caches devem ser configurados previamente e devem estar em estado de execução.
O exemplo a seguir se conecta a dois caches usando o GetCache
método.
// Specify the cache names
string clusteredCache = "demoCache";
string clientCache = "myClientCache";
CacheConnectionOptions cacheConnectionOptions = new CacheConnectionOptions();
cacheConnectionOptions.LoadBalance = true;
cacheConnectionOptions.ConnectionRetries = 5;
CacheConnectionOptions clientCacheConnectionOptions = new CacheConnectionOptions();
clientCacheConnectionOptions.LoadBalance = true;
clientCacheConnectionOptions.ConnectionRetries = 5;
clientCacheConnectionOptions.Mode = IsolationLevel.OutProc;
// Connect to the caches in a single call
// CacheConnectionOptions which can be null if not required
ICache cache = CacheManager.GetCache(clusteredCache, cacheConnectionOptions, clientCache, clientCacheConnectionOptions);
Conecte-se ao cache com credenciais de segurança
Se a segurança tiver sido habilitada, você precisará fornecer as credenciais de segurança ao se conectar aos caches para que o usuário autorizado possa realizar a operação. Para obter mais detalhes sobre como usar a segurança em NCache, Ver NCache Segurança.
// Specify cache name and user credentials
string cacheName = "demoCache";
string userId = "userid";
string password = "mypassword";
// Initialize the CacheConnectionOptions
var options = new CacheConnectionOptions();
// Enter the credentials
options.UserCredentials = new Credentials(userId, password);
// Connect to the cache using the security credentials
ICache cache = CacheManager.GetCache(cacheName, options);
guia de solução de problemas
A porta não está acessível
Às vezes, os clientes podem não conseguir se conectar a um cache devido às configurações do firewall.
Solução
Use os detalhes em nosso Guia de Introdução para alterar as configurações do firewall.
Não foi possível encontrar client.ncconf
Às vezes, um cliente pode não conseguir encontrar o cliente.ncconf arquivo enquanto se conecta ao cache. Isso acontece quando NCache diretório (%NCHOME%
) não está definido.
Solução
If %NCHOME%
não estiver definido, siga as etapas abaixo para definir a variável de ambiente para ele:
- Clique com o botão direito do mouse no Início botão e selecione System.
- No painel direito, clique em Configurações avançadas do sistema.
- No Propriedades do sistema janela, vá para o Avançado guia e clique no variáveis ambientais botão.
- No variáveis ambientais janela, sob Variáveis de sistema, clique em Novo.
- Escolha Nome variável entrar
%NCHOME%
. - Escolha Valor Variável entrar
C:\Program Files\NCache
. - Clique OK.
- Agora, para atualizar o caminho do sistema no mesmo variáveis ambientais janela, encontre o Caminho variável e clique Editar.
- No Editar variável de ambiente janela, clique em Novo e adicione
%NCHOME%\bin
para a lista. Isso garante que as ferramentas estejam disponíveis globalmente. - Clique OK para fechar cada uma das janelas.
Nenhum servidor disponível para processar a solicitação
Às vezes, um cliente pode não conseguir se conectar ao cache porque a porta cliente/servidor está bloqueada por um firewall.
Solução
Certifique-se de que a porta Cliente/Servidor (na qual NCache O serviço é iniciado e aceita diferentes conexões de clientes) não está bloqueado por um firewall. O valor padrão desta porta é '9800'. Você pode alterar o valor padrão de Alachisoft.NCache.Service.exe.config or Alachisoft.NCache.Service.dll.config arquivo.
Não é possível se comunicar com o nó do servidor
Os nós do cluster também podem não conseguir se comunicar entre si devido ao bloqueio das portas do cluster por um firewall.
Error: "Unable to communicate with server node"
Solução
Veja se o seu firewall está permitindo a porta Cliente/Servidor e Cluster. Uma porta de cluster é uma porta na qual os nós de um cluster se comunicam. Você pode alterar o valor padrão dessas portas em NCache Centro de Gerenciamento. Se você especificou um intervalo de portas no NCache Management Center, desbloqueie todas as portas do intervalo.
Deadlock do soquete do cliente
Você pode enfrentar uma situação de deadlock no soquete do cliente devido a uma longa espera por uma resposta do servidor de cache. Isso também pode resultar em muitos threads em espera que podem causar problemas de desempenho.
Solução
Etapa 1: alterações no lado do servidor
Acesse o arquivo de configuração do serviço:
- Windows.NET 4.8: Alachisoft.NCache.Service.exe.config localizado na %NCHOME%\bin\serviço
- Windows.NET: Alachisoft.NCache.Service.dll.config localizado na %NCHOME%\bin\serviço
- Linux.NET: Alachisoft.NCache.Daemon.dll.config localizado na / opt /ncache/bin/serviço
- JanelasJava: Alachisoft.NCache.Service.dll.config localizado na %NCHOME%\bin\serviço
- LinuxJava: Alachisoft.NCache.Daemon.dll.config localizado na / opt /ncache/bin/serviço
Adicione as seguintes linhas no arquivo de configuração:
<add key ="NCacheServer.EnableBadClientDetection" value = "true" />
O valor "true" indica que BadClientDetection está habilitado no soquete do cliente. Isso significa que agora, se ocorrer uma situação de deadlock no soquete do cliente, o soquete será redefinido. O valor padrão desta propriedade é "false".
<add key ="NCacheServer.ClientSocketSendTimeout" value = "10" />
quando tu tiveres habilitado BadClientDetection
, você pode especificar o intervalo de tempo após o qual o soquete é redefinido em caso de deadlock. O valor padrão desta propriedade é "10" e este valor não pode ser menor que 1.
Algumas outras propriedades também foram introduzidas em Alachisoft.NCache.Service.exe.config para ajudar nesta questão. Configure essas propriedades da seguinte forma:
<add key ="NCacheServer.EventPriorityRatio" value="30"/>
No lado do servidor, uma fila prioritária é usada para eventos e operações de cache. Você pode configurar uma proporção de eventos e operações de cache para esta fila por meio da propriedade chamada EventPriorityRatio
. O valor padrão desta propriedade é 30 que indica uma proporção de 30:70 para eventos e operações de cache. O valor desta propriedade não pode ser inferior a 1.
<add key ="NCacheServer.EventBulkCount" value="50"/>
O servidor de cache agora envia eventos em massa aos clientes. Através desta propriedade você pode definir a quantidade de itens a serem enviados em massa. Por padrão, esse valor é 50 e o valor não pode ser inferior a 1. Isso está disponível na versão do cliente 4124 e superior.
<add key ="NCacheServer.EventBulkCollectionInterval" value="2"/>
Esta propriedade é utilizada para definir o intervalo de tempo, em segundos, após o qual o volume de eventos é disparado mesmo que a contagem do volume não atinja o EventBulkCount
que o usuário especificou. O valor padrão para esta propriedade é 2 segundos e o valor não pode ser inferior a 1.
Reinicie o NCache serviço para que essas alterações entrem em vigor.
Etapa 2: Alterações no lado do cliente
Por favor, faça as seguintes alterações em seu App.config/web.config arquivo:
<configuration>
<appSettings>
<add key ="NCacheClient.AsynchronousEventNotification" value="true"/>
<add key ="NCacheClient.NumberofEventProccesingThreads" value="2"/>
</appSettings>
</configuration>
AsynchronousEventNotification
: especifica se os eventos serão disparados de forma assíncrona ou síncrona no lado do cliente. O valor padrão é "true", que indica que os eventos serão disparados de forma assíncrona. O valor "false" significa que os eventos serão disparados de forma síncrona no lado do cliente.
NumberofEventProcessingThreads
: quando o usuário configurou eventos para serem disparados de forma síncrona, esse sinalizador é usado para especificar o número de threads que processarão esses eventos no lado do cliente. Um valor muito grande pode causar problemas de desempenho.
Veja também
.INTERNET: Alachisoft.NCache.Cliente espaço para nome.
Java: com.alachisoft.ncache.cliente espaço para nome.
Node.js: Esconderijo classe.
Pitão: ncache.cliente classe.