第一次使用 Redis 的用户可能会注意到,有一个令人惊叹的事情是 42 页长的客户端列表,所有这些客户端都由 Redis 强大的开源社区开发。 目前,它由 218 个不同的客户端组成!
该列表不仅涵盖了所有主要的编程语言,还涵盖了一些我至少在开始撰写此博客之前从未听说过的语言,例如 Racket、Rebol 和 Lasso。 严格来说,该列表涵盖了 36 种不同的编程语言!(我想你已经明白了。也许我可以从现在开始去掉“!”了……)
乍一看,编写 Redis 客户端听起来很简单。 您所要做的就是阅读 Redis 协议 (RESP),它非常简单且基于文本,然后只需按照 Redis 命令 文档并逐个实现这些命令。 准确地说,该列表包含 264 个不同的命令!(对不起,我忍不住——不得不再加上一个“!”)
好吧,这 264 个命令只是冰山一角。 如果您真的想充分利用 Redis 的强大功能,仅涵盖这些命令无法体现 Redis 的优势。 除了这些“简单”的命令之外,Redis 还支持当今任何 NoSQL 数据库都应具备的功能:高可用性、分片、事务、访问控制列表 (ACL)、通知 和 可扩展性。
为了保持 Redis 的简单性和稳定性,大量处理被卸载到客户端。 例如,为了支持 Redis 事务,客户端必须承诺所有操作都在同一个套接字上完成,并且只要事务未“执行”,就无法复用此套接字。 当人们开始开发新的 Redis 客户端时,应该考虑到这些细微差别,而当涉及到支持高可用性和 集群 时,它会变得更加棘手。
大约两年前,在 Redis 代码转移到 Redis 组织 的几个月前,我们开始思考:我们如何确保 Redis 用户不仅获得最好的 Redis 服务器,而且在使用 Redis 提供的所有最新、最强大的功能时,也能获得最好的开发体验?
我们开始接触 Redis 广大社区使用的不同客户端,并将目标设定为帮助客户端维护人员跟上 Redis 庞大的功能集。 首先,我们与许多维护人员组成了一个论坛,为他们提供一个分享经验和困境的平台,同时也让 Redis 核心团队获得直接反馈。
然后,我们绘制了 10 种主要编程语言中更多采用的客户端中的差距和缺失的功能。 我们意识到,虽然某些客户端每周有数百万次的下载量,但它们仍然缺少有价值的功能(如 Redis 集群或 Pipeline),许多用户无法使用,因此我们立即开始向这些客户端贡献代码。
最后,在采访了许多 Redis 用户之后,我们意识到用户可以选择的客户端种类繁多,这表明引导 Redis 客户端非常简单,但维护一个最新的客户端是一项全职工作,而且用户很难决定选择哪个客户端,以及长期运行可以依赖哪个客户端。
去年,我们开始建议一些更常用的客户端加入 Redis 组织,因此我们很高兴欢迎三位新成员 Jedis、node-redis 和 redis-py。 这三个客户端加入了老牌成员 Hiredis 和 redis-rb。 我们希望这将减少用户之间的困惑,增加他们对客户端路线图的信心,并帮助我们确保这些客户端提供完整的 Redis 体验。
过去几个月非常忙碌,这三个客户端都进行了彻底的改版。 添加了大量缺失的功能,以确保客户端支持 Redis 提供的所有优点,同时还进行了重构,以提供更“现代”的体验(这些客户端已经有 10 多年的历史)。 辛勤工作的结果是它们各自都有了新的第 4 个版本。 我们非常欢迎您下载新的客户端候选版本 Jedis@v4、node-redis @v4 和 redis-py@v4。 请分享您的反馈。
这项工作才刚刚开始,路线图包含一些有趣的功能,因此预计在不久的将来会有更多功能推出。 其中一些功能是为最常用的 Redis 模块(如 RediSearch 和 RedisJSON)添加本机支持,这应该可以简化开发人员的体验。 此外,一些完成了其他期待已久的功能,例如 客户端缓存 支持、Redis 6 中添加的新 Redis 协议 (RESP3)、新的 Stream API 以及 Redis 7 中即将推出的 Redis 函数。