尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Garnet 分布式缓存:微软为什么用 .NET 从零重写整个缓存存储栈
Garnet 分布式缓存微软为什么用 .NET 从零重写整个缓存存储栈【免费下载链接】garnetGarnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.项目地址: https://gitcode.com/GitHub_Trending/garnet4/garnet缓存长期卡在两个瓶颈上单线程模型吃不满一台机器的 CPU线程间数据搬运又不断制造切换开销。微软研究院开源的 Garnet 分布式缓存重写了从网络收包到存储引擎的全链路——它说 RESP 协议你现有的 Redis 客户端一行代码不用改就能连上来。30 秒项目速览维度说明定位远程缓存存储cache-store主打高吞吐与低尾延迟出品方微软研究院Microsoft ResearchMIT 许可技术栈.NETC#存储引擎为自研 TsavoriteLinux/Windows 双平台协议RESPRedis 协议现有 Redis 客户端直接兼容适用人群想替换/补充缓存层、又不想改业务代码的开发者需要多分片集群与扩展点的高级用户它凭什么跑得快三个关键设计决策Garnet 的性能不是靠某个调参技巧而是把传统缓存服务器的三段流水线逐一换掉了。1. 共享内存网络层让 CPU 缓存替你搬运数据传统网络服务包括 Redis的常见做法是IO 线程收到包后把数据转交给工作线程处理——这一步既有线程切换开销也让数据离开了它原本所在的 CPU 缓存行。Garnet 借鉴 ShadowFax 研究用共享内存环形结构连接各线程让网络 IO 完成线程直接完成解析、TLS 处理乃至存储读写公共路径上零线程切换。数据留在原地被取走而不是被搬到正确的位置。2. 双存储引擎 统一日志字符串与复杂对象各走各的最优路径Garnet 的存储层由两个 Tsavorite KV 存储组成用一份统一的操作日志绑定主存储针对原始字符串GET/SET 这类优化精心管理内存以规避 GC 压力对象存储可选承载 List、Hash、Sorted Set 等复杂对象——内存中放托管堆对象更新快磁盘上存序列化形式。两者共享日志于是分层存储内存 → 本地 SSD → 云存储、非阻塞检查点、崩溃恢复这些数据库级能力就免费获得了。这意味着 Garnet 能装下比物理内存大的数据集而纯内存的竞品做不到。3. 窄腰存储 API上层再复杂底层只有四个动作整个 RESP 命令面读、更新、删除、原子读写各一类配异步回调都构建在极小的存储 API 之上。好处是因果清晰的解析/查询逻辑与存储细节并发、分层、检查点彻底解耦想加一个新命令或新数据类型只需在四个原语上组合不用碰并发模型。这也是 Garnet 能用 C# 直接写服务端存储过程、自定义数据类型并注册进协议的原因——扩展成本被压低到写个类的程度扩展框架见 website/docs/extensions/overview.md。网络与存储讲完了剩下就是这套设计落到真实业务里能解什么题。哪些场景用得上连接多、批量小的在线服务。典型痛点成千上万客户端各自发几条请求会话缓存、信息流、限流计数传统缓存在这种模式下吞吐扩展性掉得很快。Garnet 的共享内存设计正是为这个形状的工作负载优化的——官方基准测试Azure F72s v272 vCPU 机器对比 Redis 7.2 / KeyDB 6.3 / Dragonfly 6.2显示随客户端线程数增加Garnet 吞吐保持领先且扩展性更好键空间大到 2.56 亿键、远超 CPU 缓存时依然成立。测试方法可复现见 website/docs/benchmarking/results-resp-bench.md。想在服务端加自定义逻辑又不想再搭一个服务。传统方案里取键 条件判断 回写要拆成客户端多次往返或者外挂一个逻辑服务。Garnet 允许用 C# 注册自定义原始字符串操作、自定义对象类型和多键事务两阶段锁客户端照常走 RESP 协议调用Lua 脚本也支持。适合把少量关键业务逻辑从应用层下沉到缓存层的团队。数据装不下内存或想要一份带数据库能力的缓存。检查点、恢复、操作日志、多分片集群分片 复制 动态键迁移是原生能力而非外挂。另外有个反直觉的点Garnet 的预览功能 Vector Sets 用 DiskANN 实现了近似最近邻向量检索在 VectorDBBench 的 1000 万向量测试中 QPS 约为次优专项向量库的 2 倍、p99 搜索延迟压在 5ms 内官方数据功能尚在预览缓存与向量检索可以共用同一套存储栈。细节见 website/docs/commands/vector-sets.md。与 Redis 等开源缓存的差异点线程扩展模型不同Redis 主路径单线程吃满整机 CPU 靠多实例Garnet 单实例内部线程可伸缩一个共享内存实例即可占满整台机器的 CPU 与内存运维上一个节点少管好几份。兼容但不止步于兼容协议层与 Redis 客户端无缝但对象存储复用 .NET 生态实现数据类型存储扩展用 C# 而非 Lua 或 C 插件开发语言门槛不同。集群模式是被动的诚实的限定Garnet 集群不做 leader 选举而是响应你提供的控制平面下发的标准 Redis cluster 命令节点间靠 gossip 同步状态。适合已有调度/控制平面的平台团队裸跑集群场景需要自己补控制面。十分钟上手从 clone 到连上第一个客户端克隆仓库git clone https://gitcode.com/GitHub_Trending/garnet4/garnet安装 .NET 10 SDK 后在仓库根目录执行dotnet build -c Release进入main/GarnetServer执行dotnet run -c Release -f net10.0服务默认监听 TCP 6379 端口用任意 Redis 客户端如 C# 的 StackExchange.Redis即可连接--help可查看全部配置项官方文档入口website/docs/welcome/intro.md构建与部署指南Getting Startedwebsite/docs/getting-started/build.md版本发布说明Releaseswebsite/docs/welcome/releases.mdGarnet 用协议不换、栈全重写的思路证明了一件事缓存的性能上限取决于你愿意把多少底层假设拆掉重建。如果你正被高并发下的缓存吞吐或尾延迟卡住最快的验证方式就是按上面四步把它跑起来用你自己的负载压一轮。【免费下载链接】garnetGarnet is a remote cache-store from Microsoft Research that offers strong performance (throughput and latency), scalability, storage, recovery, cluster sharding, key migration, and replication features. Garnet can work with existing Redis clients.项目地址: https://gitcode.com/GitHub_Trending/garnet4/garnet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

【C语言】 if switch 语句与 while for 语句

【C语言】 if switch 语句与 while for 语句

目录 选择语句 if else 语句 悬空 else 问题 关系运算符 逻辑运算符 逻辑运算符与 && 逻辑运算符或|| 逻辑运算符取反! 短路问题 switch 语句 循环语句 for 循环 while 循环 do while 循环 break 与continue 中断语句 for与while 和do while的区别 循环嵌套…

📅 2026/9/15 17:30:39
高并发淘客系统Redis与本地缓存优化实践

高并发淘客系统Redis与本地缓存优化实践

1. 淘客返利系统的缓存挑战在典型的淘客返利系统中,每天需要处理数千万级别的商品查询请求。当用户通过返利链接跳转到电商平台时,系统需要实时查询商品信息、计算返利比例并生成追踪代码。这种场景下,数据库直接承受的QPS可能高达5万&#x…

📅 2026/9/14 17:23:11
TypeScript类型检查性能瓶颈与Go重构实践解析

TypeScript类型检查性能瓶颈与Go重构实践解析

1. 这不是“重写”,而是前端圈一次集体误读后的技术复盘“125秒到10秒:TypeScript 7.0用Go重写编译器”——这个标题在社交平台刷屏时,我正蹲在VS Code终端前跑完第17次tsc --build。看到通知弹窗的瞬间,手一抖把--incremental参数…

📅 2026/9/14 17:23:11
MORE NEWS

更多资讯

📰

Lighttools 8.4.0光学仿真入门:建模、光度学与实战要点

1. 从零开始认识Lighttools:它到底解决什么问题搞照明设计、光学系统开发的朋友,应该都听过Lighttools这个软件。我第一次接触Lighttools 8.4.0的时候,其实是有点懵的——界面功能密密麻麻,菜单层层叠叠,跟平时用的机械…

📰

CSS if()函数:原生条件计算与暗色模式实践指南

1. 这不是“CSS 写 if”,而是 CSS 终于拥有了条件计算能力2026 年初,Chrome 137 正式发布后,前端圈炸了锅。朋友圈、技术群、掘金热榜反复刷屏一句话:“2026年了,CSS 终于能写 if 了”。我第一时间打开 DevTools&#…

📰

Flutter与HarmonyOS跨端日期格式化解决方案

1. 跨端开发中的日期格式化痛点在Flutter与HarmonyOS 6.0的混合开发场景下,日期格式化这个看似简单的功能却暗藏玄机。我最近在开发一个便签类应用时,就遇到了这样的典型问题:当同一条数据需要在Android、iOS和HarmonyOS三端显示时&#xff0…

📰

CS5463电能计量芯片STM32驱动开发与校准实战

简介:面向电能计量与数据采集开发者的CS5463单相电能采集模块源码及硬件参考设计包,基于STM32F103RBT6单片机,包含完整工程源码与PDF硬件原理图,适合嵌入式工程师、电子爱好者及高校学生作为学习设计参考。包内文件总数225个&…

📰

wechat-bot指南:3步搭建支持AI自动回复的微信机器人

wechat-bot指南:3步搭建支持AI自动回复的微信机器人 【免费下载链接】wechat-bot 🤖 Multi-platform IM AI Agent for Telegram, WhatsApp, Lark, and WeChat. Connects ChatGPT / Claude / Kimi / DeepSeek / Ollama / Pi for auto-replies, community …

📰

Python+gensim中文LDA主题模型实战:从分词到可视化

做文本挖掘的人,手里最常用的几件工具里一定有jieba和gensim。尤其是当你拿到一堆中文文档——可能是用户评论、行业报告,也可能是新闻稿——想快速搞清楚这批文档到底在聊哪些话题的时候,LDA主题模型几乎是绕不开的方案。它不需要你预先贴好…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬