跳到主要内容

服务器端过程

自定义过程允许添加新的非事务性过程并将其注册到 Garnet。然后,可以从任何 Garnet 客户端调用此注册过程,以在 Garnet 服务器上执行多命令非事务性操作。

开发自定义服务器端过程

CustomProcedure 是所有自定义过程的基类。要开发新的自定义过程,必须扩展此基类,然后包含自定义逻辑。新的自定义过程需要实现一个方法

  • Execute<TGarnetApi>(TGarnetApi garnetApi, ref CustomProcedureInput procInput, ref MemoryResult<byte> output)

Execute 方法包含自定义过程的核心逻辑。其实现可以处理通过 (input) 参数传入的输入,并通过调用 IGarnetApi 上可用的任何 API 在 Garnet 上执行操作。此方法还生成过程的输出。

这些是开发自定义过程的辅助方法,与此处详述的自定义事务相同。

通过调用 Garnet 服务器对象的 RegisterAPI 对象上的

NewProcedure(string name, CustomProcedure customProcedure, RespCommandsInfo commandInfo = null)

方法,并传入其名称、自定义过程类的实例和可选的 commandInfo,在服务器端完成自定义过程的注册。

注意 当多次调用 IGarnetApi 上的 API 并产生大量输出时,可能会耗尽内部缓冲区容量。如果预期出现此类使用场景,可以按如下所述重置缓冲区。

  • 使用 IGarnetApi.GetScratchBufferOffset 检索初始缓冲区偏移量
  • IGarnetApi 上调用必要的 API
  • 使用 IGarnetApi.ResetScratchBuffer(offset) 将缓冲区重置回原来的位置
提示

作为自定义过程实现的参考,请参见 GarnetServer\Extensions\Sum.cs 中的示例。