Serverseitige Prozeduren
Benutzerdefinierte Prozeduren ermöglichen das Hinzufügen einer neuen nicht-transaktionalen Prozedur und deren Registrierung bei Garnet. Diese registrierte Prozedur kann dann von jedem Garnet-Client aufgerufen werden, um eine nicht-transaktionale Mehrbefehlsoperation auf dem Garnet-Server durchzuführen.
Entwicklung benutzerdefinierter serverseitiger Prozeduren
CustomProcedure ist die Basisklasse für alle benutzerdefinierten Prozeduren. Um eine neue zu entwickeln, muss diese Klasse erweitert und dann die benutzerdefinierte Logik integriert werden. Es gibt eine Methode, die in einer neuen benutzerdefinierten Prozedur implementiert werden muss.
Execute<TGarnetApi>(TGarnetApi garnetApi, ref CustomProcedureInput procInput, ref MemoryResult<byte> output)
Die Execute-Methode enthält die Kernlogik der benutzerdefinierten Prozedur. Ihre Implementierung kann die über den (input)-Parameter übergebenen Eingaben verarbeiten und Operationen auf Garnet durchführen, indem sie eine der unter IGarnetApi verfügbaren APIs aufruft. Diese Methode generiert dann auch die Ausgabe der Prozedur.
Dies sind die Hilfsmethoden für die Entwicklung benutzerdefinierter Prozeduren, genau wie bei benutzerdefinierten Transaktionen, die hier detailliert beschrieben sind.
Die Registrierung der benutzerdefinierten Prozedur erfolgt serverseitig durch Aufruf der
NewProcedure(string name, CustomProcedure customProcedure, RespCommandsInfo commandInfo = null)
Methode im RegisterAPI-Objekt des Garnet-Serverobjekts mit seinem Namen, einer Instanz der benutzerdefinierten Prozedurklasse und optionalen commandInfo.
HINWEIS Beim wiederholten Aufrufen von APIs auf IGarnetApi mit großen Ausgaben ist es möglich, die Kapazität des internen Puffers zu erschöpfen. Wenn solche Nutzungsszenarien erwartet werden, kann der Puffer wie unten beschrieben zurückgesetzt werden.
- Rufen Sie den anfänglichen Puffer-Offset mit
IGarnetApi.GetScratchBufferOffsetab - Rufen Sie die erforderlichen APIs auf
IGarnetApiauf - Setzen Sie den Puffer mit
IGarnetApi.ResetScratchBuffer(offset)auf seinen ursprünglichen Zustand zurück
Als Referenz für eine Implementierung einer benutzerdefinierten Prozedur siehe das Beispiel in GarnetServer\Extensions\Sum.cs.