Cache-Konnektivität
Nach erfolgreicher Konfiguration NCache, können Sie mit der Entwicklung von Anwendungen beginnen NCache durch Einbettung NCache API-Aufrufe. Dazu müssen Sie die Cache-Konnektivität sicherstellen. Sowohl einzelne als auch mehrere Caches können in einer einzigen Anwendung verbunden werden. Darüber hinaus kann der Cache mit Sicherheitsdaten verknüpft werden.
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Voraussetzungen für Cache-Konnektivität
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Clientseitige Funktionen, einschließlich Cache-Konnektivität, finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: ICache, CacheManager, GetCache, CacheConnectionOptions.
Mit Single Cache verbinden
NCache bietet ICache
Schnittstelle, um eine Instanz von zu erhalten NCache's Cache. Darüber hinaus ist die CacheManager
-Klasse können Sie über die eine Verbindung zur Cache-Instanz herstellen GetCache
Methode.
Das folgende Beispiel stellt eine Verbindung zu einem Cache namens demoCache her, der sich im Ausführungsstatus befindet.
// Specify the cache name
string cacheName = "demoCache";
// Connect to cache
ICache cache = CacheManager.GetCache(cacheName);
Note
Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
Stellen Sie eine Verbindung zu mehreren Caches her
Verwendung der GetCache
Mit dieser Methode können Sie innerhalb einer einzigen Anwendung eine Verbindung zu mehreren Caches herstellen. Dies hilft Ihnen, die Daten mehrerer Caches mit einer Anwendung zu verwalten.
Das folgende Beispiel stellt vom selben Client aus eine Verbindung zu zwei Caches her, demoCache und demoClusteredCache.
// Specify cache names
string cacheName1 = "demoCache";
string cacheName2 = "demoClusteredCache";
// Connect to the caches
ICache cache1 = CacheManager.GetCache(cacheName1);
ICache cache2 = CacheManager.GetCache(cacheName2);
Stellen Sie mithilfe von CacheConnectionOptions eine Verbindung zum Cache her
CacheConnectionOptions
Ermöglicht die Angabe von Werten von Cache-Eigenschaften beim Herstellen einer Verbindung zum Cache. Diese Werte sind die gleichen, die über konfiguriert werden können client.ncconf Datei.
Note
Jede durch angegebene Konfiguration CacheConnectionOptions
überschreibt den Wert in client.ncconf für diesen bestimmten Kunden.
In diesem Beispiel sind die Werte der RetryInterval
, ConnectionRetries
, EnableKeepAlive
und KeepAliveInterval
Eigenschaften können geändert werden. Für diese Anwendung werden diese Werte anstelle der in der Client-Konfigurationsdatei angegebenen Werte verwendet.
// 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);
Stellen Sie mithilfe von CacheConnectionOptions für Load Balancer eine Verbindung zum Cache her
Bei Anwendungsbereitstellungen werden häufig Lastausgleichsfunktionen eingesetzt, um Anfragen von überlasteten Servern zu verhindern, d. h. zu verhindern, dass Clients direkt auf die Server zugreifen. Um unter solchen Umständen sicherzustellen, dass Ihr Cluster eine Verbindung zu allen Servern herstellt, NCache bietet die IsLoadBalancer
API, wie unten gezeigt:
CacheConnectionOptions cacheConnectionOptions = new CacheConnectionOptions();
cacheConnectionOptions.ServerList = new List<ServerInfo>()
{
new ServerInfo("20.200.20.40", 9800, true)
};
ICache cache = CacheManager.GetCache("demoCache", cacheConnectionOptions);
Note
Erfahren Sie mehr darüber, wie NCache beschäftigt sich mit diesen Load Balancern hier.
Stellen Sie eine Verbindung zu Clustered und Client Cache her
Note
Verwendung der GetCache
Die Methode zum Herstellen einer Verbindung zum Cluster- und Client-Cache in einem einzigen Aufruf ist kein empfohlener Ansatz.
Mit dem kann man in einem einzigen Aufruf eine Verbindung zum Cluster- und Client-Cache herstellen GetCache
Methode. Dadurch werden beide Caches innerhalb einer einzigen Anwendung initialisiert, sodass Sie die Daten mehrerer Caches über eine Anwendung verwalten können.
Note
Wenn der lokale Cache mit dem Client-Cache verbunden ist, muss die Serialisierung mit der des Cluster-Cache identisch sein. Beide Caches müssen zuvor konfiguriert werden und sich im laufenden Zustand befinden.
Im folgenden Beispiel wird mithilfe von eine Verbindung zu zwei Caches hergestellt GetCache
Methode.
// 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);
Stellen Sie mit Sicherheitsanmeldeinformationen eine Verbindung zum Cache her
Wenn die Sicherheit aktiviert wurde, müssen Sie beim Herstellen einer Verbindung zu den Caches die Sicherheitsanmeldeinformationen angeben, damit der autorisierte Benutzer den Vorgang ausführen kann. Weitere Informationen zur Verwendung der Sicherheit in NCache, Siehe NCache Security.
// 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);
Problemlösung
Der Port ist nicht zugänglich
Manchmal können Clients aufgrund Ihrer Firewall-Konfigurationen keine Verbindung zu einem Cache herstellen.
Workaround
Nutzen Sie die Angaben in unserem Erste Schritte um Ihre Firewall-Einstellungen zu ändern.
client.ncconf konnte nicht gefunden werden
Manchmal kann ein Kunde das nicht finden client.ncconf Datei beim Herstellen einer Verbindung zum Cache. Dies geschieht, wenn NCache Verzeichnis (%NCHOME%
) ist nicht gesetzt.
Workaround
If %NCHOME%
nicht festgelegt ist, führen Sie die folgenden Schritte aus, um die Umgebungsvariable dafür festzulegen:
- Klicken Sie mit der rechten Maustaste auf Startseite -Taste und wählen System.
- Klicken Sie im rechten Bereich auf Erweiterte Systemeinstellungen.
- Im System Properties Fenster, gehe zum Fortgeschrittener und klicken Sie auf Umgebungsvariablen .
- Im Umgebungsvariablen Fenster, unter Systemvariablen, klicke auf Neu.
- Aussichten für Variablennamen eingeben
%NCHOME%
. - Aussichten für Variabler Wert eingeben
C:\Program Files\NCache
. - Klicken Sie auf Kostenlos erhalten und dann auf Installieren. OK.
- Aktualisieren Sie nun den Systempfad Umgebungsvariablen Fenster finden die Path Variable auswählen und klicken Bearbeiten.
- Im Umgebungsvariable bearbeiten Klicken Sie im Fenster Neu und fügen
%NCHOME%\bin
zur Liste. Dadurch wird sichergestellt, dass die Tools weltweit verfügbar sind. - Klicken Sie auf Kostenlos erhalten und dann auf Installieren. OK um jedes Fenster zu schließen.
Kein Server zum Verarbeiten der Anfrage verfügbar
Manchmal kann ein Client keine Verbindung zum Cache herstellen, weil der Client/Server-Port durch eine Firewall blockiert ist.
Workaround
Stellen Sie sicher, dass der Client/Server-Port (an welchem NCache Der Dienst startet und akzeptiert unterschiedliche Client-Verbindungen) wird nicht durch eine Firewall blockiert. Der Standardwert dieses Ports ist „9800“. Sie können den Standardwert von ändern Alachisoft.NCache.Service.exe.config or Alachisoft.NCache.Service.dll.config Datei.
Kommunikation mit Serverknoten nicht möglich
Cluster-Knoten können auch nicht miteinander kommunizieren, weil Cluster-Ports durch eine Firewall blockiert werden.
Error: "Unable to communicate with server node"
Workaround
Überprüfen Sie, ob Ihre Firewall den Client/Server- und Cluster-Port zulässt. Ein Cluster-Port ist ein Port, über den Knoten in einem Cluster kommunizieren. Sie können den Standardwert dieser Ports ändern NCache Management Center. Wenn Sie einen Portbereich im angegeben haben NCache Management Center, entsperren Sie alle Ports im Bereich.
Client-Socket-Deadlock
Aufgrund der langen Wartezeit auf eine Antwort vom Cache-Server kann es zu einem Deadlock auf Ihrem Client-Socket kommen. Dies kann auch dazu führen, dass viele Threads warten, was zu Leistungsproblemen führen kann.
Workaround
Schritt 1: Änderungen auf der Serverseite
Gehen Sie zur Dienstkonfigurationsdatei:
- Windows .NET 4.8: Alachisoft.NCache.Service.exe.config befindet sich in %NCHOME%\bin\service
- Windows .NET: Alachisoft.NCache.Service.dll.config befindet sich in %NCHOME%\bin\service
- Linux .NET: Alachisoft.NCache.Daemon.dll.config befindet sich in / Opt /ncache/bin/Dienst
- Windows Java: Alachisoft.NCache.Service.dll.config befindet sich in %NCHOME%\bin\service
- Linux Java: Alachisoft.NCache.Daemon.dll.config befindet sich in / Opt /ncache/bin/Dienst
Fügen Sie der Konfigurationsdatei die folgenden Zeilen hinzu:
<add key ="NCacheServer.EnableBadClientDetection" value = "true" />
Der Wert „true“ gibt an, dass BadClientDetection auf Ihrem Client-Socket aktiviert ist. Dies bedeutet, dass der Socket zurückgesetzt wird, wenn an Ihrem Client-Socket eine Deadlock-Situation auftritt. Der Standardwert dieser Eigenschaft ist „false“.
<add key ="NCacheServer.ClientSocketSendTimeout" value = "10" />
Wenn Sie aktiviert haben BadClientDetection
können Sie das Zeitintervall festlegen, nach dem der Socket im Falle eines Deadlocks zurückgesetzt wird. Der Standardwert dieser Eigenschaft ist „10“ und dieser Wert darf nicht kleiner als 1 sein.
Einige andere Eigenschaften wurden ebenfalls eingeführt Alachisoft.NCache.Service.exe.config um bei diesem Problem zu helfen. Bitte konfigurieren Sie diese Eigenschaften wie folgt:
<add key ="NCacheServer.EventPriorityRatio" value="30"/>
Auf der Serverseite wird eine Prioritätswarteschlange für Ereignisse und Cache-Vorgänge verwendet. Sie können über die aufgerufene Eigenschaft ein Verhältnis von Ereignissen und Cache-Vorgängen für diese Warteschlange konfigurieren EventPriorityRatio
. Der Standardwert dieser Eigenschaft ist 30, was ein Verhältnis von 30:70 für Ereignisse und Cache-Vorgänge angibt. Der Wert dieser Eigenschaft darf nicht kleiner als 1 sein.
<add key ="NCacheServer.EventBulkCount" value="50"/>
Der Cache-Server sendet jetzt Ereignisse in großen Mengen an Clients. Über diese Eigenschaft können Sie die Anzahl der Artikel festlegen, die in großen Mengen versendet werden sollen. Standardmäßig ist dieser Wert 50 und der Wert darf nicht kleiner als 1 sein. Dies ist in der Client-Version 4124 und höher verfügbar.
<add key ="NCacheServer.EventBulkCollectionInterval" value="2"/>
Diese Eigenschaft wird verwendet, um das Zeitintervall in Sekunden festzulegen, nach dem die Masse der Ereignisse ausgelöst wird, auch wenn die Massenanzahl nicht erreicht wird EventBulkCount
die der Benutzer angegeben hat. Der Standardwert für diese Eigenschaft beträgt 2 Sekunden und der Wert darf nicht kleiner als 1 sein.
Starten Sie das neu NCache Service, damit diese Änderungen wirksam werden.
Schritt 2: Änderungen auf Client-Seite
Bitte nehmen Sie die folgenden Änderungen in Ihrem vor App.config/Web.config Datei:
<configuration>
<appSettings>
<add key ="NCacheClient.AsynchronousEventNotification" value="true"/>
<add key ="NCacheClient.NumberofEventProccesingThreads" value="2"/>
</appSettings>
</configuration>
AsynchronousEventNotification
: Gibt an, ob Ereignisse asynchron oder synchron auf der Clientseite ausgelöst werden. Der Standardwert ist „true“, was bedeutet, dass Ereignisse asynchron ausgelöst werden. Der Wert „false“ bedeutet, dass Ereignisse synchron auf der Clientseite ausgelöst werden.
NumberofEventProcessingThreads
: Wenn der Benutzer Ereignisse so konfiguriert hat, dass sie synchron ausgelöst werden, wird dieses Flag verwendet, um die Anzahl der Threads anzugeben, die diese Ereignisse auf der Clientseite verarbeiten. Ein sehr großer Wert kann zu Leistungsproblemen führen.
Siehe auch
.NETZ: Alachisoft.NCache.Klient Namespace.
Java: com.alachisoft.ncache.Klient Namespace.
Node.js: Cache-Speicher Klasse.
Python: ncache.Klient Klasse.