跳到主要内容

Garnet 开发入职培训

欢迎来到 Garnet!在此页面中,您将找到设置 Garnet 开发工作环境的主要步骤。

快速入门和有用资源

要了解 Garnet 及其功能,您可以从Garnet 欢迎页开始。

此外,以下页面和文档可能会有所帮助

工具

  • Visual Studio 2022(推荐预览版)
  • .NET 8.x
  • Git
  • Azure Windows VM
  • Azure Linux VM
  • 交互式 RESP 客户端,例如
    • 在 Linux 上:redis-cli,Linux 中的交互式 RESP 客户端
    • 在 Windows 上:Memurai(用于使用 memurai-cli 客户端)或通过 WSL 使用 redis-cli
    • RedisInsight,用于试验存储内容
    • telnet

开始编写代码

  1. 克隆存储库
git clone https://github.com/microsoft/garnet.git

克隆存储库后,您可以运行单元测试,也可以运行服务器并使用 Windows 或 Linux 中建议的 RESP 客户端之一。

  1. 运行测试套件
    dotnet test -c Release -l "console;verbosity=detailed"
  1. 运行服务器

使用 4 GB 内存大小和 64 MB 索引大小

cd <root>/main/GarnetServer/
dotnet run -c Debug -f net8.0 -- --logger-level Trace -m 4g -i 64m
  1. 在 Windows 中使用 Memurai 客户端向 Garnet 发送命令。关于如何在 Windows 上安装 Memurai 的指南可以在此处找到。

  2. 如果您使用 Linux,可以使用 redis-cli 工具。我们官方支持的 Linux 发行版是 Ubuntu。

  3. 第三个选项是在 Windows 上安装 Redis-Insight。请按照此处的官方指南进行操作。

故障排除

  1. 如果您需要在 Linux 中使用 TLS,请按照以下指南操作

    <root>/Garnet/test/testcerts/README.md

  2. 如果您需要运行本地设备库,请确保具备以下依赖项

    sudo apt install -y g++ libaio-dev uuid-dev libtbb-dev

Garnet API 开发

代码模式

对服务器的所有请求都是基本的 RESP 命令或数组 RESP 命令。下面显示了每个命令的一个示例

基本命令:PING RESP 表示

$4\r\nPING\r\n

数组命令:SET mykey abc

RESP 表示

*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nabcdefg\r\n

开发概念

  • 理解 C# 中的内存类型:托管堆、栈内存、非托管内存等。

  • Span 和 SpanByte 的使用

    TsavoriteGarnet 大量依赖这两种类型来在内存中分配数据,然后将其传输到网络层。理解并熟悉它们将非常有益于更好地理解一般代码。

拉取请求协议

任何新功能、对现有功能的更改或错误修复都需要使用以下过程完成

  1. Garnet 项目上创建一个 Issue 项,使用以下标准:新功能的增强、修复的 Bug、小型改进或更改的任务。

  2. 最好使用以下命名约定创建自己的本地分支

    <用户名>/分支名称

  3. 包含用于测试新命令或功能的单元测试。

  4. 一旦准备好审查,创建一个拉取请求。请务必将其链接到开发部分中的问题项。

格式化样式指南

  • 注释是文档的重要组成部分。确保您的代码包含它们。

  • 注释的官方格式是

    //<一个空格> 注释以大写字母开头

    示例

    // 这个注释格式很好

  • 方法应包含其摘要块注释和每个参数的描述。

    示例


/// <summary>
/// Iterates the set of keys in the main store.
/// </summary>
/// <param name="patternB">The pattern to apply for filtering</param>
/// <param name="allKeys">When true the filter is omitted</param>
/// <param name="cursor">The value of the cursor in the command request</param>
/// <param name="storeCursor">Value of the cursor returned</param>
/// <param name="Keys">The list of keys from the stores</param>
/// <param name="count">The size of the batch of keys</param>
/// <param name="type">Type of key to filter out</param>
/// <returns></returns>
public bool DbScan(ArgSlice patternB, bool allKeys, long cursor, out long storeCursor, out List<byte[]> Keys, long count = 10, Span<byte> type = default);
  • 作为一项好的实践,请遵循驼峰式 C# 命名约定。

Garnet.sln Visual Studio 解决方案文件的结构

  • 有关详细信息,请参阅此处的代码结构页面。

运行基准测试应用程序

  • 有关详细信息,请参阅此处的 Resp 基准测试页面。

构建

测试

作为健全性检查,您可以运行 Garnet 测试套件。以下显示了在 .NET 8 的 Release 模式下运行测试的命令(确保您位于存储库的根文件夹中)。

    dotnet test -c Release -f net8.0 -l "console;verbosity=detailed"

请注意,Tsavorite 在文件夹<root>/Garnet/libs/storage/Tsavorite 中有自己的解决方案文件和测试套件。

提示:默认情况下,Garnet 监听 TCP 端口 6379,如果您需要从远程计算机访问 Garnet,可以使用此信息调整防火墙设置。