架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 246|回复: 1

[资料] 使用 .NET 开发的 Garnet 缓存和 Redis 简单对比

[复制链接]
发表于 2024-3-28 18:00:42 | 显示全部楼层 |阅读模式
Garnet 是微软研究推出的一种新型远程缓存存储,具有多种独特优势:

  • Garnet 采用流行的RESP线路协议作为起点,这使得可以从当今大多数编程语言(例如C# 中的StackExchange.Redis )中可用的未经修改的 Redis 客户端使用 Garnet 。
  • 相对于同类开源缓存存储,Garnet 通过许多客户端连接和小批量提供更好的吞吐量和可扩展性,从而节省大型应用程序和服务的成本。
  • Garnet 使用启用了加速 TCP 的商品云 (Azure) VM 展示了极低的客户端延迟(在 99.9% 时通常低于 300 微秒),这对于现实场景至关重要。
  • Garnet 基于最新的 .NET 技术,具有跨平台、可扩展和现代化的特点。它被设计为易于开发和发展,而不会牺牲常见情况下的性能。我们利用 .NET 丰富的库生态系统来扩展 API,并提供开放的优化机会。由于我们对 .NET 的精心使用,Garnet 在 Linux 和 Windows 上都实现了最先进的性能。


开源地址:https://github.com/microsoft/garnet
文档:https://microsoft.github.io/garnet/

Garnet 具有以下主要优点:

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


Garnet 并不支持所有 Redis 命令,具体支持的命令查看:https://microsoft.github.io/garnet/docs/commands/api-compatibility
Garnet 项目包含一个 Benchmark 工具,用于使用不同客户端、不同工作负载和不同策略来运行 RESP 基准测试,以测量吞吐量、性能和延迟。地址:https://github.com/microsoft/garnet/tree/main/benchmark
RESP 协议:https://redis.io/docs/reference/protocol-spec/

本文使用 Redis 自带的基准测试工具进行简单测试,测试环境如下:

Redis Benchmark 基准性能测试
https://www.itsvse.com/thread-9645-1-1.html

缓存 版本
Redis Redis 3.0.504 (00000000/0) 64 bit
Garnet Garnet 1.0.2 64 bit; standalone mode


Redis 基准测试

首先,使用命令行启动 Redis 缓存,命令如下:


测试命令如下:


结果如下:

QQ截图20240328175614.jpg

====== SET ======
  500000 requests completed in 24.38 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.03% <= 1 milliseconds
0.25% <= 2 milliseconds
2.65% <= 3 milliseconds
16.49% <= 4 milliseconds
59.95% <= 5 milliseconds
99.09% <= 6 milliseconds
99.76% <= 7 milliseconds
99.86% <= 8 milliseconds
99.93% <= 9 milliseconds
99.98% <= 10 milliseconds
99.99% <= 11 milliseconds
100.00% <= 12 milliseconds
20512.82 requests per second

====== GET ======
  500000 requests completed in 27.41 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.03% <= 1 milliseconds
0.19% <= 2 milliseconds
6.44% <= 3 milliseconds
25.82% <= 4 milliseconds
45.65% <= 5 milliseconds
98.79% <= 6 milliseconds
99.98% <= 7 milliseconds
99.98% <= 8 milliseconds
99.98% <= 9 milliseconds
100.00% <= 9 milliseconds
18238.86 requests per second

Garnet 基准测试

新建一个 .NET 8 的控制台项目,先引用 Microsoft.Garnet 包,命令如下:


代码如下:


启动命令如下:


使用相同的基准测试命令,结果如下:

QQ截图20240328175321.jpg

====== SET ======
  500000 requests completed in 11.51 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

75.51% <= 1 milliseconds
88.24% <= 2 milliseconds
92.04% <= 3 milliseconds
99.46% <= 4 milliseconds
99.98% <= 5 milliseconds
99.99% <= 6 milliseconds
100.00% <= 12 milliseconds
100.00% <= 12 milliseconds
43448.04 requests per second

====== GET ======
  500000 requests completed in 31.50 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

0.01% <= 1 milliseconds
0.90% <= 2 milliseconds
27.25% <= 3 milliseconds
97.65% <= 4 milliseconds
99.82% <= 5 milliseconds
99.94% <= 6 milliseconds
99.98% <= 7 milliseconds
99.98% <= 9 milliseconds
99.98% <= 10 milliseconds
99.99% <= 11 milliseconds
100.00% <= 12 milliseconds
100.00% <= 12 milliseconds
15872.01 requests per second

由于测试工具、软件版本、测试参数等,都会导致不同的结果,测试仅供参考,通过本文简单的测试可以看到 Garnet 明显比 Redis 有更低的延迟。

(完)




上一篇:.NET/C# 反射属性,可空类型判断
下一篇:SSE(一)使用 ASP.NET Core 作为 SSE 服务器
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-3-28 18:01:32 | 显示全部楼层
KeyDB 是一个完全开源的数据库,由 Snap 支持,是 Redis 的更快替代品。地址:https://docs.keydb.dev/
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 20:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表