跳到主要内容

处理层

一旦网络层读取传入消息并将其传递给 RespServerSession 类,Garnet 服务器的消息就会得到处理。

在一个会话中,TryConsumeMessages 方法负责通过以下方式处理传入消息:

  • 测量和跟踪处理延迟,以及消耗的字节和执行的操作。
  • 使用 ProcessMessages 方法进一步处理消息。
  • 作为消息处理过程中发生的任何异常的捕获器。这确保了服务器持续运行,即使消息处理导致关键的未处理异常,并且所有资源都正确释放。

ProcessMessages 方法对传入数据进行快速解析,以快速识别正确的命令类型。根据命令的类型,由以下方法之一执行进一步处理。

  • ProcessBasicCommands
    这包括 GET、SET、DEL、RENAME、EXISTS、EXPIRE、TTL、INCR、PING、MULTI、EXEC、QUIT 等命令。

  • ProcessArrayCommands
    如果它不是上述基本命令之一,则会进行进一步解析以检查传入数据是否与任何数组命令匹配——与多个键相关的命令、使用对象存储操作的命令等,例如 MGET、MSET、KEYS、SCAN、ZADD、ZREM、LPUSH、HSET 等。

  • ProcessOtherCommands
    这用于处理其余命令,包括 ProcessAdminCommands(用于 AUTH、CONFIG、CLUSTER 等命令)、自定义命令、自定义事务等。

此方法还跟踪会话级别指标,例如已处理的读取、写入和总命令数。还在此处执行事务相关操作,例如调用跳过、启动、停止和处理内部命令。有关更多详细信息,请参阅事务页面

如上所述,一旦识别出初始命令,将由命令特定方法执行进一步处理。

命令处理的下一步由名为 Network[Command] 的方法执行。这些方法负责从传入网络缓冲区读取和解析命令特定参数。解析必要的参数后,它们调用底层存储层方法来执行命令操作。然后,它们还将响应消息以正确的 RESP 格式写回客户端。为此,它们使用网络发送器创建的缓冲区。例如,请参阅 BasicCommands.cs 中的 NetworkIncrement 方法。

存储层方法执行命令的实际处理逻辑。它们利用底层 Tsavorite 层的 API 来执行读取、RMW、Upset、删除等操作。此外,在 Tsavorite 回调中实现了额外的处理逻辑。例如,请参阅 MainStoreOps.cs 中的 Increment 方法和 MainStoreFunctions 中的相关方法。