Garnet 开发入职培训
欢迎来到 Garnet!在此页面中,您将找到设置 Garnet 开发工作环境的主要步骤。
快速入门和有用资源
要了解 Garnet 及其功能,您可以从Garnet 欢迎页开始。
此外,以下页面和文档可能会有所帮助
- RESP 规范
- Redis 数据类型
- FASTER,我们为在 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
开始编写代码
- 克隆存储库
git clone https://github.com/microsoft/garnet.git
克隆存储库后,您可以运行单元测试,也可以运行服务器并使用 Windows 或 Linux 中建议的 RESP 客户端之一。
- 运行测试套件
dotnet test -c Release -l "console;verbosity=detailed"
- 运行服务器
使用 4 GB 内存大小和 64 MB 索引大小
cd <root>/main/GarnetServer/
dotnet run -c Debug -f net8.0 -- --logger-level Trace -m 4g -i 64m
-
在 Windows 中使用 Memurai 客户端向 Garnet 发送命令。关于如何在 Windows 上安装 Memurai 的指南可以在此处找到。
-
如果您使用 Linux,可以使用 redis-cli 工具。我们官方支持的 Linux 发行版是 Ubuntu。
-
第三个选项是在 Windows 上安装 Redis-Insight。请按照此处的官方指南进行操作。
故障排除
-
如果您需要在 Linux 中使用 TLS,请按照以下指南操作
<root>/Garnet/test/testcerts/README.md
-
如果您需要运行本地设备库,请确保具备以下依赖项
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 的使用
Tsavorite 和 Garnet 大量依赖这两种类型来在内存中分配数据,然后将其传输到网络层。理解并熟悉它们将非常有益于更好地理解一般代码。
-
在项目中
SpanByte 的实现
<root>
\Tsavorite\cs\src\core\VarLen\SpanByte.cs
拉取请求协议
任何新功能、对现有功能的更改或错误修复都需要使用以下过程完成
-
在Garnet 项目上创建一个 Issue 项,使用以下标准:新功能的增强、修复的 Bug、小型改进或更改的任务。
-
最好使用以下命名约定创建自己的本地分支
<用户名>
/分支名称 -
包含用于测试新命令或功能的单元测试。
-
一旦准备好审查,创建一个拉取请求。请务必将其链接到开发部分中的问题项。
格式化样式指南
-
注释是文档的重要组成部分。确保您的代码包含它们。
-
注释的官方格式是
//<一个空格> 注释以大写字母开头
示例
// 这个注释格式很好
-
方法应包含其摘要块注释和每个参数的描述。
示例
/// <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,可以使用此信息调整防火墙设置。