跳到主要内容

欢迎使用 Garnet

Garnet 是微软研究院推出的一款新型远程缓存存储,旨在实现极高的速度、可扩展性和低延迟。Garnet 在单个节点内支持线程可扩展。它还支持分片集群执行,具备复制、检查点、故障转移和事务功能。它可以在主内存以及分层存储(如 SSD 和 Azure 存储)上运行。Garnet 支持丰富的 API 表面和强大的可扩展性模型。

Garnet 使用 Redis 的 RESP 作为其主要网络协议。因此,可以使用大多数编程语言中可用的未经修改的 Redis 客户端与 Garnet 配合使用,例如,在 C# 中使用 StackExchange.Redis。与其他开源缓存存储相比,您可以获得更好的性能、延迟、可扩展性和持久性功能。

请注意,Garnet 是微软研究院的一个研究项目,应将其视为研究项目。尽管如此,我们是一群充满激情的全职研究人员和开发人员,致力于使其尽可能稳定和高效。我们的目标是围绕 Garnet 创建一个充满活力的社区。事实上,Garnet 的质量已经足够高,以至于微软的几个第一方和平台团队已经内部部署了多个版本的 Garnet 长达数月。

Garnet 提供以下主要优势

  • 相对于同类开源缓存存储,在小批量和多个客户端会话的情况下,服务器吞吐量(操作数/秒)高出几个数量级。
  • 在支持加速 TCP 的商用云(Azure)机器上,无论是在 Windows 还是 Linux 上,单次操作的延迟极低(99.9% 的情况下通常低于 300 微秒)。
  • 随着客户端数量的增加,无论是否进行客户端批量处理,可伸缩性都更好。
  • 能够使用单个共享内存服务器实例(无需节点内集群)利用服务器机器的所有 CPU/内存资源。
  • 支持大于内存的数据集,可溢出到本地和云存储设备。
  • 数据库功能,如快速检查点和恢复,以及发布/订阅。
  • 支持多节点分片哈希分区(Redis“集群”模式)、状态迁移和复制。
  • 通过全面的测试套件(Garnet 及其存储层 Tsavorite 的数千个单元测试)进行充分测试。
  • 易于演进和扩展的 C# 代码库。

如果您的应用程序或服务需要一个缓存存储,它具有许多实用功能、高性能,并基于最先进的微软研究院技术进行现代化设计,那么 Garnet 是您的理想系统。在此处查看有关 Garnet 性能优势的更多详细信息此处

API 覆盖范围

Garnet 支持大量(且不断增长的)API 表面,包括

  • 原始字符串操作,如 GET、SET、MGET、MSET、GETSET、SETEX、DEL、EXISTS、RENAME、EXPIRE、SET 变体(如果存在则设置,如果不存在则设置)。
  • 数字操作,如 INCR、INCRBY、DECR、DECRBY。
  • 远程数据结构,如 List、Hash、Set、Sorted Set 和 Geo。
  • 分析 API,如 Hyperloglog 和 Bitmap。
  • 检查点/恢复操作,如 SAVE、LASTSAVE、BGSAVE。
  • 管理操作,如 PING、QUIT、CONFIG、RESET、TIME。
  • ACL 支持。
  • 发布/订阅、事务和 Lua 脚本支持。

该列表正在不断增长,我们很乐意听取您最想要的 API!

此外,Garnet 支持强大的自定义操作符框架,您可以在其中注册自定义 C# 数据结构以及服务器上的读-修改-写操作,并使用相同的网络协议访问它们。因此,您可以使用客户端执行新命令的能力调用这些命令,例如 StackExchange.Redis 客户端库中的 ExecuteExecuteAsync 调用。

支持的平台

Garnet 服务器基于高性能 .NET 技术,从头开始编写,并注重性能。Garnet 经过广泛测试,可在 Linux 和 Windows 上以及商用 Azure 硬件和边缘设备上同样高效地工作。

还可以将 Garnet 视为一个速度极快的远程 .NET 数据结构服务器,可以通过利用丰富的 C# 库生态系统进行扩展,从而超越核心 API。Garnet 的存储层称为 Tsavorite,它支持各种后端存储设备,如快速本地 SSD 驱动器和 Azure 存储。它还具有针对 Windows 和 Linux 优化的设备。最后,Garnet 支持 TLS 以实现安全连接。

Redis 是 Redis Ltd. 的注册商标。其所有权利均归 Redis Ltd. 所有。微软的任何使用仅供参考,不表示 Redis 与微软之间存在任何赞助、认可或关联。