被 Redis 抛弃的 Windows,终于等来了自己的缓存方案

416 阅读5分钟



那天凌晨一点半,我正坐在工位上,手里捧着一杯已经凉透的咖啡,盯着监控大屏。Redis 延迟曲线很稳,QPS 也很健康,一切都很美好。唯一不美好的,是我们隔壁工位老王的脸色。

老王负责的是一个全 Windows Server 环境的项目,原因也很简单:历史包袱 + 商业软件依赖 + 客户指定操作系统

于是问题来了:“小米啊,Redis 在 Windows 上真的就只能靠第三方移植吗?就没有一个原生、正经、官方支持 Windows 的缓存方案吗?”

我当时的第一反应你肯定也猜到了: “兄弟,Redis 官方都不支持 Windows,你就别折腾了,老老实实上 Linux 吧。”

老王沉默了三秒,然后幽幽地说了一句:“微软不是也做数据库、做缓存吗?”

我当场一愣。那天晚上,我第一次点进了一个 GitHub 项目Project Garnet

Redis 就像一辆手动挡跑车,而 Windows 一直想要“自动挡”

在进入 Garnet 之前,我们先把背景捋清楚。Redis 为啥一直不待见 Windows?

你一定听过这些经典答案:

  • Redis 是单线程事件循环
  • 深度依赖 epoll / fork / mmap
  • Linux 是 Redis 的“主场”

用一句话总结就是:Redis 是为 Linux 长出来的,不是移植过来的。

这就好比:

  • Redis 是一辆 手动挡 + 后驱 + 高转速跑车
  • Linux 是一条 封闭赛道
  • 而 Windows 更像一条 城市高架 + 自动挡需求

你硬要把跑车丢进早晚高峰的高架路,能跑,但并不优雅。

Garnet 是谁?它想干什么?

好,现在主角登场。Garnet = 微软出品的高性能内存 KV 存储引擎

它的定位非常清晰:在 Windows / .NET 生态下,提供一个 Redis 风格、高性能、现代化的缓存解决方案

它不是 Redis 的简单复刻,而是:

  • 协议兼容 Redis
  • 架构重新设计
  • 深度拥抱 Windows + .NET

如果 Redis 是一位“Linux 原教旨主义者”,那 Garnet 更像是:穿着西装、会讲 C#、精通 Windows 内核的工程师。

打个比方:Redis 和 Garnet 像什么?

我最喜欢用生活里的东西解释技术。

1、Redis 像什么?

一家祖传手擀面馆

  • 配方经典
  • 手艺精湛
  • 在 Linux 这条老街上无人能敌
  • 但你要它进商场、进写字楼、适配新系统,就有点别扭

2、Garnet 像什么?

一家连锁精品咖啡品牌

  • 标准化
  • 工业级
  • 天生适配写字楼(Windows)
  • 能直接接入现代化系统(.NET、Azure)

Garnet 的核心设计思路

下面这段是重点,稍微“技术味”会浓一点。Garnet 的几个关键特性:

一句话总结:Garnet 更像一个“缓存引擎平台”,而不只是一个缓存服务。

它是怎么做到“快”的?

如果你对 Redis 熟悉,那你一定知道它的快来自:

  • 内存
  • 单线程
  • 简单数据结构

而 Garnet 的快,思路有点不一样。

Garnet 的性能策略:

  • 多线程 + async IO
  • Log-Structured 存储设计
  • CPU cache-friendly 数据布局
  • 现代 NUMA / 多核优化

你可以把它理解成:Redis 是“一个人把活干到极致”,Garnet 是“一群人配合把活干到极致”

直接上代码:5 分钟跑一个 Garnet

说再多,不如跑一跑。

1、启动 Garnet 服务

如果你在 Windows 上,可以直接:

启动后,你会看到类似输出:

没错,端口都是 Redis 默认端口

2、使用 redis-cli 连接

然后试试熟悉的命令:

输出:

老王当场瞪大了眼睛:“这……不就是 Redis 吗?”

在 .NET 里嵌入 Garnet(重点玩法)

这是 Garnet 最有意思的地方。Redis 是一个“外部服务”,Garnet 可以是一个“库”。

示例:在 .NET 应用中嵌入

你可以把它理解成:缓存,不再是“隔壁机房的一个服务”,而是你应用里的一个组件。

Redis vs Garnet,放在一张表里看

这是大家最关心的部分。

结论一句话: Redis 是“成熟老将”,Garnet 是“潜力新秀”。

那 Garnet 能不能“替代 Redis”?

我很负责任地说一句:不是现在,不是全部,但在某些场景,非常合适。

1、适合 Garnet 的场景

  • Windows Server 环境
  • .NET 技术栈
  • 不想引入 Linux 运维成本
  • 对 Redis 高级特性依赖不深
  • 更看重可嵌入、可控性

2、不适合的场景

  • 重度 Redis Module
  • Lua 脚本依赖
  • Redis Cluster 深度使用
  • 超大规模成熟生产集群

总结:缓存世界正在变得更“多元”

那天凌晨,老王最后拍了拍我的肩膀:“至少,我终于不是那个‘非要上 Linux’的人了。”

我突然意识到一件事:Redis 不是缓存的全部,只是缓存世界里最亮的那颗星。

而 Garnet 的出现,至少说明了一点:Windows 阵营,也终于有了一个“认真对待缓存”的答案。

END

如果你正在:

  • 被 Windows 环境限制
  • 被 Redis 官方不支持折磨
  • 或者只是单纯想看看新东西

那我真心建议你:试试 Garnet,哪怕只是跑一跑。

如果你觉得这篇文章对你有一点点帮助,欢迎 点赞、在看、转发,我们下次继续聊点有意思的技术。

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!