想了解“Garnet:力压 Redis 的 C# 高性能分布式存储数据库”?给你一份够用不啰嗦的速览 + 上手指南(含可直接跑通的命令),并附上权威来源。

Garnet 是什么?为什么火

Garnet 是微软研究院开源的高性能远程缓存/存储引擎,用 C#/.NET 构建,协议上兼容 Redis 的 RESP,可用现成的 Redis 客户端直接连。它在微软内部多处场景已落地并开源发布。(微软)

性能与特性要点

  • 吞吐&延迟领先:官方基准对比 Redis 7.2、KeyDB、Dragonfly,Garnet 在多项场景下吞吐与尾延迟都有优势;学术对比研究(2025)也称其在吞吐、延迟和内存效率上均明显优于 Redis(但兼容性不是 100%)。(GitHub微软DIVA Portal)
  • 协议/客户端:走 RESP 协议,可直接用 Redis 客户端(如 C# 的 StackExchange.Redis)。(微软)
  • 可扩展&容错:支持集群模式(分片+复制)、在线槽位迁移、检查点与恢复、AOF(预写日志)、分层存储(内存+SSD/云存储)。(GitHub微软)
  • 可编程性:支持 C# 侧的事务型存储过程/自定义操作,比 Redis 的 Lua 扩展性更强(但目前不提供 Lua 脚本特性)。(GitHub微软)

一句话对比:Garnet 目标是“更快的 Redis-like”,尤其在高并发与多核伸缩上发力;但在生态/兼容性上仍在完善中。(GitHub微软Stack Overflow)


5 分钟本机上手(Windows / Linux 通用)

前置:安装 .NET 8 SDK。(GitHub微软)

# 1) 获取源码
git clone https://github.com/microsoft/garnet.git
cd garnet

# 2) 构建发布版
dotnet restore
dotnet build -c Release

# 3) 启动服务(默认监听 6379)
cd main/GarnetServer
dotnet run -c Release -f net8.0

# 可查看配置项/默认值
dotnet run -c Release -f net8.0 -- --help

# 示例:将索引内存设为 512MB
dotnet run -c Release -f net8.0 -- -i 512m

以上命令来自官方“Getting Started”。首次跑通后就能用任意 Redis 客户端连接(默认端口 6379)。(GitHub微软)

Windows 连接小贴士:若用 WSL 的 redis-cli 连 Windows 的 Garnet,需要把服务绑定到 0.0.0.0 并放行防火墙。(GitHub微软)


用 C# 客户端 60 秒打通

Garnet 兼容 Redis 客户端,这里用最常见的 StackExchange.Redis(也可以用官方的 GarnetClient)。

using StackExchange.Redis;

var mux = await ConnectionMultiplexer.ConnectAsync("localhost:6379");
var db = mux.GetDatabase();

// 写入
await db.StringSetAsync("hello", "garnet");
// 读取
var val = await db.StringGetAsync("hello");
Console.WriteLine(val); // => garnet

(来自官方说明:可用“未修改的 Redis 客户端”连接 Garnet。)(微软)


集群(分片+复制)速览

  • 键空间默认 16384 槽,支持主从复制、按槽位在线迁移;单键操作全支持,多键操作要求同槽。
  • 集群目前是被动设计:节点不做选主,需要你用控制面(或脚本/运维工具)发命令管理拓扑。
  • 可用标准的 Redis Cluster 命令 管理 Garnet 集群。
    (GitHub微软GitHub)

持久化与分层存储

  • Checkpoint + 快速恢复AOF(写前日志);
  • Tiered Storage:内存可溢出到 SSD/云存储(含 Azure Storage 设备适配)。
    (部分真实世界使用/文档仍在完善,社区讨论活跃。)(GitHub微软GitHub)

与 Redis/Valkey/Dragonfly 的选择建议

  • 要极致吞吐/多核扩展,且能接受不完全 Redis 兼容:优先试 Garnet。(GitHub微软DIVA Portal)
  • 要最大化生态/兼容性(云服务、周边工具、命令全集):首选 Redis/Valkey。(DIVA Portal)
  • 仅内存型、高性能且强调简化:也可评估 Dragonfly(但它与 Garnet 的存储目标不同)。(GitHub微软)

已知限制/注意事项

  • Lua 脚本不支持(有实验分支但性能不佳,未合入)。(GitHub)
  • “Drop-in 替换”并非对所有功能成立:命令覆盖面很广,但并非完全一致,迁移需评估脚本/模块/管理工具链。(Stack Overflow微软)
  • 集群为被动控制面,自动高可用编排需要你自己或平台来做。(GitHub)

进一步阅读与资源


如果你告诉我部署环境(Windows/Linux、容器/K8s)、是否需要持久化/分层存储是否要做集群,我可以按你的场景给到一键化命令行/配置模版压测建议