dot Redis 8 发布了——它是开源的

了解更多

欢迎 antirez 回归 Redis

我们非常高兴地欢迎 Salvatore Sanfilippo 回归 Redis——您可能更熟悉他的名字“antirez”。Salvatore 于 2009 年创建了 Redis 项目,并一直负责到 2020 年,之后他休息了一段时间,专注于家庭和其他项目。在这篇文章中,他解释了是什么让他长时间休息后又回到了 Redis。我们很高兴他以 Redis 布道者的新身份回归,并期待他帮助我们继续发展社区。这篇文章最初以“我离开的地方” 为题发表在 Salvatore 的个人博客上。我们经许可在此转载。

我离开的地方

我不是那种对自己的工作产生强烈依恋的人。当我决定离开 Redis 时,大约是 1620 天前(约 4.44 年),我再也没有看过 Redis 的源代码、提交信息或任何相关内容。有时,当我需要使用 Redis 时,我只是下载并编译它。我只需输入“make”,就很高兴地看到,多年之后,构建 Redis 仍然如此简单。

我的抽离并不是因为我讨厌过去的工作。虽然从长远来看,我的创造性工作变得越来越不重要,“处理项目”的活动变得越来越繁重——这是许多程序员都能适应的转变,但这并非我擅长的——好吧,我离开时仍然喜欢做 Redis 相关的事情。然而,我并不认同大多数与我同龄(我现在 47 岁)的人所持的观点:他们认为自己仍然年轻。我想要做新的事情,尤其是写作。我想要花更多时间陪伴家人并帮助亲戚。我确实需要休息。

然而,在“写作的几年里”(顺便说一句,我仍在写作),我经常回到编程,作为从紧张的写作中放松的方式(写作是我发现唯一比编程更耗费脑力的活动):我做了一些嵌入式项目;玩了更多神经网络;构建了 Telegram 机器人:什么都沾了点。随机瞎折腾挺有趣的,但从长远来看,我感觉自己缺乏一个真正的目标,每天都开始感受到更强烈的回归技术世界的紧迫感。与此同时,我看到 Redis 社区正在分裂,这让我有些担忧,即使我只是一个局外人。

于是我开始想,也许,毕竟,我可以在 Redis 生态系统中重新扮演一个角色。也许我可以重塑公司对待社区的态度。也许我甚至可以帮助 Redis 核心重新成为新开发的主要焦点。基本上,我可以成为某种“布道者”(我不喜欢这个职位的名称,但……好吧,你懂的),也就是说,一方面,作为公司和社区之间的桥梁,同时也能制作编程演示,发明和描述新模式,编写关于新旧内容的文档、视频和博客文章。那么,新事物的设计呢?我可以从社区人们的工作中学习,从他们的困难中提炼,然后反馈设计想法,以便 Redis 能够发展。

纽约时光

有一天,我女儿(现在 12 岁,她是我生命中的重要人物,用她的智慧、创造力和爱点亮了我的日子)想去纽约度过生日。我们决定,是的,这毕竟是个好主意,我们最近过了几年非常困难的日子,所以,为什么不呢?我女儿现在更像一个少女,而不是孩子。因此,在纽约,我想:也许现在是时候了,我可以找一份兼职工作。我最近通过视频通话见到了新任 Redis CEO Rowan Trollope。我感觉我可以和他一起努力,调整公司与社区的关系以及代码库的方向。于是我给他写了一封电子邮件,问道:你认为我能否以某种身份回归?Rowan 对我的提议表示了兴趣,很快我们就达成了一些协议。

关于许可证变更

人们会问我 *实际上* 为什么这样做,除了上面写的内容之外,是否有其他隐情,是否涉及某种协议,或者一大笔钱;是否有奇怪或不清楚的地方。但有时事情就是这么无聊:1. 是我联系了公司,而不是反过来。2. 我回归不是为了拿巨额报酬,也不是为了利用某种情况——只是正常工资(但声明一下:是的,我像以前一样拥有 Redis 股票期权,不多也不少)。3. 对于 Redis 改变许可证,我没有大的问题;尤其是我认为社区的分裂 *并非* 真正与此有关。但既然人们肯定会问我这个非常重要的问题,我最好立刻把所有真相告诉大家。

许可证困境

我几乎一生都在编写开源软件。然而,就像我是一个无神论者,但看到别人相信上帝时仍然感到高兴(如果这能帮助他们度过生活的艰难),我也不认为开源是编写软件的唯一方式。当我开始在一家公司开发 Redis 时,我是两位创始人之一,那时我们保留了闭源代码(Redis 后来之所以开源,是因为它不被认为是核心产品的一部分)。我们不希望我们的服务被其他人复制,就这么简单。所以在这方面我不是一个极端分子——我只在软件设计方面是一个极端分子。

此外,我不认为开放性和许可证仅仅是 OSI(开放源代码促进会)告诉我们的那样。我认为许可证是一个关于你可以做什么和不能做什么的范围。同时,我确实担心大型云提供商改变了系统软件领域的激励机制。Redis 并不是唯一一个改变许可证的项目,它实际上是最后一个……在一大堆项目中的最后一个。我感觉近年来许多项目甚至没有启动,就是因为缺乏清晰的潜在商业模式。所以,Redis 的许可证变更不是我的决定,也许我会选择不同的许可证?我不确定,现在重新讨论太容易了,我已经远离这个领域多年,并且没有商业压力。但总的来说,我能理解这个选择。

此外,如果你阅读了新的 Redis 许可证,当然,它不是 BSD 许可证,但基本上只要你不将 Redis 作为一项服务出售,你就可以像以前一样以非常相似的方式和自由度使用它(我的意思是,你仍然可以修改 Redis,重新分发它,在你的营利性公司中商业使用 Redis,免费使用等等)。如果你愿意,你 *甚至* 仍然可以将 Redis 作为服务出售,前提是将所有编排系统也按照相同的许可证发布(这可能是没有人会做的,但这表明了许可证的 copyleft 方法)。许可证语言几乎与 AGPL 相同,只是在 SAAS 相关部分有所修改。所以,它没有得到 OSI 批准?是的,但我对将 SSPL 称为封闭许可证持保留意见。

你会说(我能听见你):真正的问题在于有公司控制着开源项目的方向!所以最终利益会更偏向公司,而不是用户群体。我很感谢有许多项目没有公司的直接参与(除了外部赞助),但你知道吗?在许多大型项目中,公司的参与实际上减缓了偏离正确轨道的进程。这在 Redis 的案例中确实发生过。

软件界的罗宾汉

让我们回到过去,回到 Redis 的最初日子。

当 Redis 开始流行起来时,我想找到一种方法继续投入其中。这发生在 VMware 赞助我的工作之前。我开始思考商业模式,你猜怎么着?它是一种闭源产品的形式,这些产品可以以某种方式帮助人们运行 Redis,以这样或那样的方式。(令人惊讶的是,与这个想法相关的一个代码仓库仍然在线,显示着 *15* 年前的提交: https://github.com/antirez/redis-tools

我曾打算尝试某种开放核心模式;我还记得我曾想过将新代码的 BSD 许可证延迟六个月发布,以便为付费用户创造某种优势。现在我不相信我会做出那样不负责任、对用户玩弄奇怪把戏的事情,但我能做到今天这样,要感谢 VMware,以及后来更广泛地感谢 Redis Labs:他们让我成为了一个开放源代码软件界的罗宾汉,我从一家公司那里得到了丰厚的报酬,不,不是为了公司的利益,而仅仅是为了 Redis 社区的最佳利益。我确定,这比拥有自己的公司要好得多。

VMware 以及后来的 Redis Labs,不仅仅为我付出了报酬。如果你快速查看代码仓库的贡献历史,你会看到第二大贡献者是 Oran Agra (Redis),然后是 Pieter Noordhuis (VMware),等等。

所以,基本上我认为,12 年来只专注于用户基础编写的 BSD 代码是一件很不错的事情,是值得高兴的。而对我来说,目前最重要的一点是,与社区的分裂并非由于许可证问题,或者至少主要不是因为许可证。实际上,新许可证可以解决其中的一部分问题:现在不再有将核心代码置于维护模式、将新开发放入模块中的动力。有了新许可证,云提供商不能再随意复制 Redis 代码库并出售,而无需任何收入分成(这要求真的很高吗?这本可以避免你最近看到的所有许可证变更,不仅仅是 Redis)。有了新许可证,焦点可以重新回到 Redis 核心,新的、令人兴奋的功能将由世界各地的开发者掌握。数十名因其工作得到良好报酬的人将在 GitHub 仓库中提交有用的、文档完善的变更。这也是我想要帮助公司实现的一件事,我会为此努力。我们需要让许可证变更对用户基础和功能产生积极影响:这就是我的想法。

关于人工智能、大型语言模型和向量索引

但还有更多:Redis 对开发向量能力越来越感兴趣,并且总体上支持你可以通过人工智能进行的编程。现在,我每天都阅读 Hacker News,看到大量技术人员不喜欢人工智能和新的发展。我也看到很多人甚至懒得深入尝试最新的模型(提示:Claude AI 独树一帜),仍然认为它们有点没用。对我来说,情况不同。我一直热爱神经网络。我在 2003 年写了我的第一个神经网络库,并被整个概念的力量和酷炫程度完全震撼了。现在,在 2024 年底,我终于看到这个领域的惊人成果,几年前看起来像科幻小说的东西现在成为可能:最近 Claude AI 成为了我的推理/编辑/编程伙伴。我现在能够比过去完成更多的事情。我经常因为人工智能而做 *更多的工作*,但我做得更好。最近,我为一家意大利出版商写了一篇科幻短篇小说,多亏 Claude 对部分内容的批评,我重写了结尾,写出了更好的作品(我没有让 Claude 写故事或情节的任何一行:人工智能的伟大用法不是让机器做你做得更好的事情)。

昨天,我需要评估我的向量经过 8 位量化后点积计算能快多少;我告诉 Claude 我需要一个以特定方式设计的基准测试,两分钟后我就可以测试它,修改它,并了解它是否值得。基本上,人工智能没有取代我,人工智能通过我的工作反馈加速或提升了我。我相信(无论 RAG 有多流行,它不一定是主要应用,也不是最未来可期或最有用的,因为模型的上下文越来越大,很快流行模型的注意力可能会有线性复杂度),抱歉离题了,我想说的是,我相信学习型嵌入(learned embeddings)会一直存在,而向量搜索属于 Redis,原因有几个:首先,向量索引是数据结构,尤其是慢速的数据结构,而这样的数据结构在内存中可以很好地工作。此外,因为我认为我找到了暴露它们的完美 API。

在我设计 Redis 的过程中,我总是表现出一些矛盾的倾向。我总是乐于拒绝某些看起来非常适合项目的东西(比如命名 Lua 脚本,哈希字段过期时间,顺便说一下,它们现在都是 Redis 的一部分),但同时我又添加了 Lua 脚本能力——当这看起来像疯了一样时,一个解释器竟然在 Redis 里面?!——还有 Pub/Sub 能力,这似乎与上下文无关,然后是 Streams,甚至还有在计算机科学书籍中不存在的合成数据结构,比如有序集合。因为对我来说,新特性是否适合 Redis 取决于两点:用例和内部设计契合度。对我来说,Redis 是程序员的乐高积木,而不是一个“产品”。

向量集合

所以最近我开始思考,有序集合可以启发一种新的数据类型,其中分数实际上是一个向量。在我与 Rowan 交流的同时,我开始撰写设计文档,然后开始实现新数据类型的概念验证,从头重新实现了 HNSW(而不是使用现有的库,因为我想调整每一个细节),以 Redis 的方式。好吧,我不确定这最终会怎样,我仍在编码的早期阶段,但如果这个提议被接受,也许我最终会再次贡献代码。我实现的这个模块(之后可能会合并到核心——现在它只是为了简单起见作为一个模块)实现了直接操作嵌入的新命令。我只给你们看一个提示:

VSIM top_1000_movies_imdb ELE “The Matrix”  WITHSCORES

  1.  “The Matrix”
  2.  “0.9999999403953552”
  3.  “Ex Machina”
  4.  “0.8680362105369568”
  5.  “Akira”
  6.  “0.8635441958904266”
  7.  “District 9”
  8.  “0.8631418347358704”
  9.  “The Martian”
  10. “0.8608670234680176”
  11.  “The Bourne Ultimatum”
  12. “0.8599717319011688”
  13. “The Bourne Supremacy”
  14. “0.8591427505016327”
  15. “Blade Runner”
  16. “0.8585404753684998”
  17. “Metropolis”
  18. “0.8572960793972015”
  19. “Inception”
  20. “0.8521313071250916”

所以你有了 VSIM, VADD, VCARD,这些都是显而易见的。这完全是基于有序集合的想法,但使用多维分数(嵌入向量!)和 K-NN 匹配。你觉得怎么样?当然,除此之外还有许多实现技巧来提高效率。但目前这只是概念验证代码,让我再多花点时间在这上面。我正在实现线程、降维、量化等等许多东西。说实话,相当有趣。

正如你所见,这里没有提到混合搜索(hybrid search),这是最近关于向量存储的热门词汇。再说一次,这就是 Redis 的方式:让开发者扮演一个角色,并由他们自己决定权衡:毕竟,他们知道自己在建模什么。每个键都有一个向量索引,就像程序员使用有序集合时一样,他们会创造有趣的分割策略、新的模式、Lua 脚本、模式以及所有需要的东西来构建他们的用例。

然而,虽然通常关联的项目可能是一个小字符串或文档 ID,但没有什么阻止它成为更复杂的东西,带有可以稍后过滤的元数据(但我会抵制这种想法)。我只是觉得许多用例并不真正需要复杂的服务器端过滤,可以通过预先分区数据来建模。

我非常感兴趣的是可能添加一个 STORE 选项,将结果存储到有序集合中,而不是返回给用户,当然,分数就是相似度。所有这些也会对效率、可伸缩性、使用脚本的能力等方面产生复杂而有趣的影响:我希望在接下来的几周和几个月里有机会更多地谈论它。

好吧,好吧:回到这篇博客文章的主题。但也许上面的内容才是 *真正* 的重点,那些令人兴奋的新想法。

所以,我回来了 🙂

所有这一切都为了说明,我回来了。我认为现在是时候向所有的 Redis 社区成员表达深深的感谢,感谢你们多年来所做的一切。再见,我希望这段旅程中还有更多的东西可以添加。

附言:我在 BlueSky 上很活跃,如果你想关注这一切的进展。 https://bsky.app/profile/antirez.bsky.social