今天,我们很高兴地宣布针对 Redis 的四个新高级客户端库的预览版发布。我们称这些库为 Redis OM:对象映射,以及更多适用于 Redis 的内容。我们的目标是尽可能来便于从你的应用程序中使用 Redis 和 Redis 模块。
我们推出对 .NET、Node.js、Python 和 Java (Spring) 的支持。如果你是一位希望了解我们为什么对这次发布感到非常激动的是软件开发者,你可以立即试用我们的新库之一
适用于 .NET 的 Redis OM
适用于 Node.js 的 Redis OM
适用于 Python 的 Redis OM
适用于 Spring 的 Redis OM
每个 Redis OM 库都包含完整的自述文件和教程,帮助你快速入门。
现在只想了解高级概述?继续阅读!
作为程序员和计算机科学极客,我们喜欢优秀的数据结构的优雅性。而且,正如我们所知,Redis 提供了大量坚如磐石的分布式数据结构。Redis 贯穿了一种 Unix 理念:你可以编制经过良好构建的基元集合来解决手边的问题。这种可组合性让 Redis 用户能够创建各种各样的工具,包括高速缓存、分布式锁、消息队列、速率限制器、发布/订阅系统、后台任务执行器、重复数据删除程序和权限系统,仅举几例。
挑战在于,并非每个人都有时间自己重新发明这些工具。并非每个人都有构建他们自己的速率限制器或弄清楚如何将 Redis 哈希映射到 Java 类(反之亦然!)所需的带宽。我们构建了(并且继续构建)Redis OM,使你即使没有时间使用 Redis 提供的核心数据结构来编制你自己的抽象,也可以获得 Redis 的性能。
Redis OM(发音为“ōm”)是 对象映射(以及更多内容)的 Redis。我们的目标是为你提供一整套高级抽象工具箱,使其能够轻松地在你的常用编程环境中使用 Redis 数据。我们提供的第一个抽象是对象映射。如果你正在对某个领域进行建模,则很可能以面向对象的方式表示该领域。Redis OM 库让你能够透明地在 Redis 中持久存储你的领域对象,并使用流利的以语言为中心的 API 对它们进行查询。
对于此第一个预览版,我们专注于对象映射和流利查询。由于 Python 对于我们程序员来说是一种通用语言,因此,让我们从 Redis OM for Python 中探索一些示例,来了解此处实现的内容。
首先,我们可以定义一个简单的领域对象。在此情况下,该对象表示一个客户
class Customer(HashModel):
first_name: str
last_name: str
email: EmailStr
join_date: datetime.date
age: int
bio: Optional[str]
现在,我们创建一个新的 Customer 实例,如下所示
andrew = Customer(
first_name="Andrew",
last_name="Brookins",
email="andrew.brookins@example.com",
join_date=datetime.date.today(),
age=38,
bio="Python developer, works at Redis, Inc."
)
然后,我们可以通过调用 save() 将此新的 customer 实例写入 Redis
andrew.save()
Redis OM 库将为任何新对象自动生成唯一 ID。为此,我们正在使用 ULID(通用唯一词典排序标识符)。你可以将 ULID 视为一种用户友好的 UUID。ULID 是可排序的、全局唯一的、URL 安全的,并且在进行 base32 编码时具有相当高的可读性。
想要一个示例?一个典型的 ULID 如下所示: 01ARZ3NDEKTSV4RRFFQ69G5FAV
无论如何,一旦你将其中一个对象保存到 Redis,你就可以通过提供其唯一 ID 来检索它。在 Python 中,你可以使用 pk 属性访问该唯一 ID(pk 当然是指“主键”)。
将唯一 ID 传递给 Customer.get(),你将取回你的对象
Customer.get(andrew.pk)
使用 Redis OM 库,你可以通过两种方式序列化域对象。我们将此 Customer 对象序列化为 Redis 哈希,因为它是一个具有扁平结构的简单对象。但是,如果你有具有大量字段或嵌套对象的对象,则可能需要将它们序列化为 JSON(为此,你需要可用的源 RedisJSON 模块)。
如果你将域对象映射到 Redis,你可能会希望能够查询它们。 RedisJSON(和代理 RediSearch)为 Redis 提供索引和查询。Redis OM 库利用这些特性为你提供对域对象进行流畅查询的 API。
我们举一个简单的例子。使用 Redis OM Python 库,你可以构造流畅表达式来查询数据。例如,这里有一个查询,它检索姓氏为“Javayant”或“Jagoda”的所有客户
Customer.find((Customer.last_name == "Javayant") | (Customer.last_name == "Jagoda")).all()
这些查询的优点是它们始终被索引,因此它们在默认情况下是高效的。参阅我们的 最新基准测试博客,以了解你可能看到的性能优势。
Redis OM 库有点像一个系列;它们的目标是一致的,即尽可能地轻松使用 Redis 和 Redis 模块。与此同时,每个库都有自己特定于语言的重点,所有这些都旨在取悦我们为之编写的 .NET、Node.js、Python 和 Java/Spring 软件工程师。一些示例?
适用于 Node.js 的 Redis OM 是用 TypeScript 编写的,为 TypeScript 和 JavaScript 提供一流的支持。
Redis OM for .NET 允许您使用 LINQ查询您的 Redis 域对象。
Redis OM Spring 可与 Spring 本机集成,扩展 Spring Data Redis(提供熟悉的界面),甚至还增加了对 RedisBloom 的一些支持(为您提供概率性数据结构)。
Redis OM Python 与流行的 FastAPI 框架本机集成。将 FastAPI 与 Redis 结合使用是构建高性能 Web 服务的一种绝佳方式。Redis OM Python 还支持同步和异步使用。
我们很高兴宣布 Redis OM 库的预览版本,我们迫切希望得到您的反馈。发送 Pull 请求和在 GitHub 上提问是一种很棒的方式,但我们也希望直接与您交流。在 Redis Discord 服务器 上找到我们。来打个招呼,告诉我们您接下来需要什么!在我们继续认真开发和改进 Redis OM 库的过程中,我们欢迎您的想法、问题和贡献。