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ückgegebeneModuleActionStatus-Enumeration zeigt den Status der Modulinitialisierung an, wobei derSuccess-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 seinemname, der Implementierung des Rohzeichenkettenbefehls incustomFunctions,type, der angibt, ob es sich um einen ReadModifyWrite- oder Read-Befehl handelt (RMW ist der Standardtyp), optionalcommandInfozur Bereitstellung von Details wie Arity, Schlüsselangabe, ACL-Kategorien usw. und die optionaleexpirationTickszur 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 ihremname, einer Methode, die die Transaktionsimplementierungproczurückgibt, und optionalcommandInfo. -
ModuleActionStatus RegisterType(CustomObjectFactory factory)Benutzerdefinierte Datentypen werden mit dieser Methode registriert, wobeifactorydie 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 ihremname, der bereits überRegisterTyperegistriertenfactory-Instanz, der Implementierung des benutzerdefinierten Objektbefehls incommand,type, der angibt, ob es sich um einen ReadModifyWrite- oder Read-Befehl handelt (RMW ist der Standardtyp), und optionalcommandInfo. -
ModuleActionStatus RegisterProcedure(string name, CustomProcedure customScriptProc, RespCommandsInfo commandInfo = null)Nicht-transaktionale benutzerdefinierte Prozeduren werden mit dieser Methode registriert, mit ihremname, der Implementierung alscustomScriptProcund optionalcommandInfo.
Als Referenz für eine Modulimplementierung siehe das Beispiel in playground\SampleModule.