Connettività della cache
Dopo aver configurato correttamente NCache, puoi iniziare a sviluppare applicazioni utilizzando NCache mediante incorporamento NCache Chiamate API. Per fare ciò, è necessario garantire la connettività della cache. È possibile collegare cache singole o multiple in un'unica applicazione. Inoltre, la cache può essere collegata con credenziali di sicurezza.
Note:
Questa funzionalità è disponibile anche in NCache Professional.
Prerequisiti per la connettività della cache
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache Per le funzionalità lato client, inclusa la connettività cache, fare riferimento alla pagina specificata Prerequisiti dell'API lato client.
- Per i dettagli dell'API, fare riferimento a: ICache, Gestore cache, Ottieni cache, Opzioni di connessione cache.
Connetti a cache singola
NCache fornisce ICache
interfaccia per ottenere un'istanza di NCachecache. Inoltre, il CacheManager
class ti consente di connetterti all'istanza della cache tramite il GetCache
metodo.
L'esempio seguente si connette a una cache denominata demoCache che è in stato di esecuzione.
// Specify the cache name
string cacheName = "demoCache";
// Connect to cache
ICache cache = CacheManager.GetCache(cacheName);
Note:
Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
Connetti a più cache
Usando il GetCache
metodo, puoi connetterti a più cache all'interno di una singola applicazione. Questo ti aiuterà a gestire i dati di più cache utilizzando un'unica applicazione.
L'esempio seguente si connette a due cache, demoCache e demoClusteredCache dallo stesso client.
// Specify cache names
string cacheName1 = "demoCache";
string cacheName2 = "demoClusteredCache";
// Connect to the caches
ICache cache1 = CacheManager.GetCache(cacheName1);
ICache cache2 = CacheManager.GetCache(cacheName2);
Connettiti alla cache usando CacheConnectionOptions
CacheConnectionOptions
consente di specificare i valori delle proprietà della cache durante la creazione di una connessione alla cache. Questi valori sono gli stessi che possono essere configurati tramite client.ncconf file.
Note:
Qualsiasi configurazione specificata tramite CacheConnectionOptions
sovrascriverà il valore in client.ncconf per quel particolare cliente.
In questo esempio, i valori di RetryInterval
, ConnectionRetries
, EnableKeepAlive
e KeepAliveInterval
le proprietà possono essere modificate. Per questa applicazione, verranno utilizzati questi valori anziché quelli specificati nel file di configurazione del client.
// 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);
Connettiti alla cache utilizzando CacheConnectionOptions per Load Balancer
Spesso, le distribuzioni delle applicazioni utilizzano sistemi di bilanciamento del carico per evitare richieste provenienti da server sovraccarichi, ovvero impedire ai client di accedere direttamente ai server. In tali circostanze, per garantire che il tuo cluster si connetta a tutti i server, NCache crea un IsLoadBalancer
API, come dimostrato di seguito:
CacheConnectionOptions cacheConnectionOptions = new CacheConnectionOptions();
cacheConnectionOptions.ServerList = new List<ServerInfo>()
{
new ServerInfo("20.200.20.40", 9800, true)
};
ICache cache = CacheManager.GetCache("demoCache", cacheConnectionOptions);
Note:
Ulteriori informazioni su come NCache si occupa di questi bilanciatori di carico qui.
Connetti a Clustered e Client Cache
Note:
Usando il GetCache
Il metodo per connettersi al cluster e alla cache client in un'unica chiamata non è un approccio consigliato.
È possibile connettersi al cluster e alla cache client in un'unica chiamata utilizzando il file GetCache
metodo. Ciò inizializzerà entrambe le cache all'interno di una singola applicazione, aiutandoti quindi a gestire i dati di più cache attraverso un'unica applicazione.
Note:
Se la cache locale è connessa alla cache client, la serializzazione deve essere uguale a quella della cache in cluster. Entrambe le cache devono essere configurate in precedenza e devono essere in stato di esecuzione.
L'esempio seguente si connette a due cache utilizzando il metodo GetCache
metodo.
// 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);
Connettiti alla cache con le credenziali di sicurezza
Se la sicurezza è stata abilitata, è necessario fornire le credenziali di sicurezza durante la connessione alle cache in modo che l'utente autorizzato possa eseguire l'operazione. Per maggiori dettagli sull'utilizzo della sicurezza in NCache, Vedere NCache Sicurezza.
// 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);
Troubleshooting
La porta non è accessibile
A volte i client potrebbero non essere in grado di connettersi a una cache a causa delle configurazioni del firewall.
Soluzione
Utilizza i dettagli nel nostro guida introduttiva per modificare le impostazioni del firewall.
Impossibile trovare client.ncconf
A volte un cliente potrebbe non essere in grado di trovare il file client.ncconf file durante la connessione alla cache. Questo accade quando NCache rubrica (%NCHOME%
) non è impostato.
Soluzione
If %NCHOME%
non è impostato, seguire i passaggi seguenti per impostare la relativa variabile di ambiente:
- Fare clic con il tasto destro del mouse su Inizio tasto e selezionare Sistema.
- Nel riquadro destro, fare clic su Impostazioni di sistema avanzate.
- Nel Proprietà di sistema finestra, vai alla Tecnologia scheda e fare clic su variabili ambientali pulsante.
- Nel variabili ambientali finestra, sotto Variabili di sistema, clicca su New.
- Nel Nome variabile entrare
%NCHOME%
. - Nel Valore variabile entrare
C:\Program Files\NCache
. - Clicchi OK.
- Ora per aggiornare il percorso di sistema nello stesso variabili ambientali finestra, trova il file sentiero variabile e fare clic Modifica.
- Nel Modifica variabile d'ambiente finestra, fare clic New e aggiungere
%NCHOME%\bin
alla lista. Ciò garantisce che gli strumenti siano disponibili a livello globale. - Clicchi OK per chiudere ciascuna finestra.
Nessun server disponibile per elaborare la richiesta
A volte un client potrebbe non essere in grado di connettersi alla cache perché la porta client/server è bloccata da un firewall.
Soluzione
Assicurarsi che la porta client/server (in cui NCache Il servizio si avvia e accetta connessioni client diverse) non è bloccato da un firewall. Il valore predefinito di questa porta è '9800'. È possibile modificare il valore predefinito da Alachisoft.NCache.Service.exe.config or Alachisoft.NCache.Service.dll.config file.
Impossibile comunicare con il nodo del server
I nodi del cluster potrebbero anche non essere in grado di comunicare tra loro a causa del blocco delle porte del cluster da parte di un firewall.
Error: "Unable to communicate with server node"
Soluzione
Verifica se il tuo firewall consente la porta client/server e cluster. Una porta del cluster è una porta su cui comunicano i nodi di un cluster. È possibile modificare il valore predefinito di queste porte da NCache Centro di gestione. Se hai specificato un intervallo di porte nel file NCache Management Center, sblocca tutte le porte nell'intervallo.
Deadlock del socket client
È possibile che si verifichi una situazione di deadlock sul socket client a causa di una lunga attesa per una risposta dal server cache. Ciò può anche comportare molti thread in attesa che possono causare problemi di prestazioni.
Soluzione
Passaggio 1: modifiche sul lato server
Vai al file di configurazione del servizio:
- Windows.NET 4.8: Alachisoft.NCache.Service.exe.config situato in %NCHOME%\bin\servizio
- Windows.NET: Alachisoft.NCache.Service.dll.config situato in %NCHOME%\bin\servizio
- Linux.NET: Alachisoft.NCache.Daemon.dll.config situato in / optare /ncache/bin/servizio
- Windows Java: Alachisoft.NCache.Service.dll.config situato in %NCHOME%\bin\servizio
- Linux Java: Alachisoft.NCache.Daemon.dll.config situato in / optare /ncache/bin/servizio
Aggiungi le seguenti righe nel file di configurazione:
<add key ="NCacheServer.EnableBadClientDetection" value = "true" />
Il valore "true" indica che BadClientDetection è abilitato sul socket del client. Ciò significa che ora se si verifica una situazione di deadlock sul socket client, il socket verrà ripristinato. Il valore predefinito di questa proprietà è "false".
<add key ="NCacheServer.ClientSocketSendTimeout" value = "10" />
Quando hai abilitato BadClientDetection
, è possibile specificare l'intervallo di tempo dopo il quale il socket viene ripristinato in caso di deadlock. Il valore predefinito di questa proprietà è "10" e questo valore non può essere inferiore a 1.
Sono state introdotte anche alcune altre proprietà Alachisoft.NCache.Service.exe.config per aiutare con questo problema. Si prega di configurare queste proprietà come segue:
<add key ="NCacheServer.EventPriorityRatio" value="30"/>
Sul lato server, viene utilizzata una coda di priorità per eventi e operazioni di cache. È possibile configurare un rapporto tra eventi e operazioni di cache per questa coda tramite la proprietà chiamata EventPriorityRatio
. Il valore predefinito di questa proprietà è 30 che indica un rapporto di 30:70 per eventi e operazioni di cache. Il valore di questa proprietà non può essere inferiore a 1.
<add key ="NCacheServer.EventBulkCount" value="50"/>
Il server cache ora invia eventi ai client in blocco. Attraverso questa proprietà è possibile impostare il numero di articoli da inviare in blocco. Per impostazione predefinita, questo valore è 50 e il valore non può essere inferiore a 1. È disponibile nella versione client 4124 e successive.
<add key ="NCacheServer.EventBulkCollectionInterval" value="2"/>
Questa proprietà viene utilizzata per impostare l'intervallo di tempo, in secondi, dopo il quale viene attivata la maggior parte degli eventi anche nel caso in cui il conteggio complessivo non raggiunga il limite EventBulkCount
che l'utente ha specificato. Il valore predefinito per questa proprietà è 2 secondi e il valore non può essere inferiore a 1.
Riavvia il NCache servizio affinché queste modifiche abbiano effetto.
Passaggio 2: modifiche sul lato client
Si prega di apportare le seguenti modifiche al tuo App.config/web.config file:
<configuration>
<appSettings>
<add key ="NCacheClient.AsynchronousEventNotification" value="true"/>
<add key ="NCacheClient.NumberofEventProccesingThreads" value="2"/>
</appSettings>
</configuration>
AsynchronousEventNotification
: specifica se gli eventi verranno attivati in modo asincrono o sincrono sul lato client. Il valore predefinito è "true" che indica che gli eventi verranno attivati in modo asincrono. Il valore "false" significa che gli eventi verranno attivati in modo sincrono sul lato client.
NumberofEventProcessingThreads
: quando l'utente ha configurato gli eventi da attivare in modo sincrono, questo flag viene utilizzato per specificare il numero di thread che elaboreranno questi eventi sul lato client. Un valore molto elevato può causare problemi di prestazioni.
Vedere anche
.NETTO: Alachisoft.NCache.Cliente spazio dei nomi.
Giava: com.alachisoft.ncache.cliente spazio dei nomi.
Node.js: Cache classe.
Pitone: ncache.cliente classe.