Zum Hauptinhalt springen

Module

Module helfen dabei, verwandte benutzerdefinierte Befehle, Prozeduren und Transaktionen zu einem einzigen Binärpaket zu bündeln. Sobald ein Modul geladen ist, stehen alle darin enthaltenen benutzerdefinierten Operationen den Benutzern zur Verfügung. Alle Module müssen von der ModuleBase-Klasse abgeleitet sein und die OnLoad-Methode implementieren, um die Modulinitialisierung durchzuführen. Alle benutzerdefinierten Befehle, Prozeduren und Transaktionen, die innerhalb eines Moduls implementiert sind, werden während der Initialisierung über diese Methode bei Garnet registriert.

OnLoad(ModuleLoadContext context, string[] args)

Optionale Argumente, die an das Modul übergeben werden, sind über den args-Parameter verfügbar. Der ModuleLoadContext stellt die folgenden APIs zur Verfügung, um das Modul und seine Komponenten zu registrieren.

  • ModuleActionStatus Initialize(string name, uint version)
    Dies muss der erste Schritt sein, um das Modul mit seinem Namen und Versionsinformationen zu registrieren. Alle anderen Registrierungen müssen danach erfolgen. Die zurückgegebene ModuleActionStatus-Enumeration zeigt den Status der Modulinitialisierung an, wobei der Success-Status die erfolgreiche Registrierung des Moduls bestätigt.

  • ModuleActionStatus RegisterCommand(string name, CustomRawStringFunctions customFunctions, CommandType type = CommandType.ReadModifyWrite, RespCommandsInfo commandInfo = null, long expirationTicks = 0) Jeder benutzerdefinierte Rohzeichenkettenbefehl sollte mit dieser Methode registriert werden, mit seinem name, der Implementierung des Rohzeichenkettenbefehls in customFunctions, type, der angibt, ob es sich um einen ReadModifyWrite- oder Read-Befehl handelt (RMW ist der Standardtyp), optional commandInfo zur Bereitstellung von Details wie Arity, Schlüsselangabe, ACL-Kategorien usw. und die optionale expirationTicks zur Steuerung, wann der Schlüssel abläuft.

  • ModuleActionStatus RegisterTransaction(string name, Func<CustomTransactionProcedure> proc, RespCommandsInfo commandInfo = null) Transaktionen sollten mit dieser Methode registriert werden, mit ihrem name, einer Methode, die die Transaktionsimplementierung proc zurückgibt, und optional commandInfo.

  • ModuleActionStatus RegisterType(CustomObjectFactory factory) Benutzerdefinierte Datentypen werden mit dieser Methode registriert, wobei factory die Implementierung der benutzerdefinierten Objektfabrik ist, die Instanzen des benutzerdefinierten Objekts erstellen kann.

  • ModuleActionStatus RegisterCommand(string name, CustomObjectFactory factory, CustomObjectFunctions command, CommandType type = CommandType.ReadModifyWrite, RespCommandsInfo commandInfo = null) Benutzerdefinierte Objektbefehle werden mit dieser Methode registriert, mit ihrem name, der bereits über RegisterType registrierten factory-Instanz, der Implementierung des benutzerdefinierten Objektbefehls in command, type, der angibt, ob es sich um einen ReadModifyWrite- oder Read-Befehl handelt (RMW ist der Standardtyp), und optional commandInfo.

  • ModuleActionStatus RegisterProcedure(string name, CustomProcedure customScriptProc, RespCommandsInfo commandInfo = null) Nicht-transaktionale benutzerdefinierte Prozeduren werden mit dieser Methode registriert, mit ihrem name, der Implementierung als customScriptProc und optional commandInfo.

Tipp

Als Referenz für eine Modulimplementierung siehe das Beispiel in playground\SampleModule.