想了解“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)
进一步阅读与资源
- 官方主页/文档/入门与特性:(GitHub微软)
- GitHub 仓库(源码、Releases、问题讨论):(GitHub)
- 微软研究院发布解读(背景、落地):(微软)
- 基准与对比研究:(GitHub微软, DIVA Portal)
如果你告诉我部署环境(Windows/Linux、容器/K8s)、是否需要持久化/分层存储、是否要做集群,我可以按你的场景给到一键化命令行/配置模版与压测建议。
发表回复