服务器端过程
自定义过程允许添加新的非事务性过程并将其注册到 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 中的示例。