Redis OM 数据管理指南

Redis OM 是一个高性能、低延迟的内存数据库解决方案,特别适用于需要快速数据访问的实时应用程序。它支持多种数据类型,包括字符串、列表、集合和HyperLogLogs。Python客户端 Redis-py 是访问 Redis 数据库的常用工具之一,它允许开发者与 Redis 中存储的不同类型数据进行交互,支持流水线操作、连接池、线程安全,并提供 Pub/Sub、Lua 脚本和事务支持。Redis-py 与 Redis 命令行紧密对应。

尽管已经存在 Redis 客户端,但 Redis OM 的出现是为了提供更高层次的数据管理抽象。例如,在 Redis 命令行中添加学生信息到学生哈希的方式如下:

127.0.0.1:6379> HMSET student Name Rohan Class 11

而在 Redis-py 中实现相同的操作如下:

import redis client = redis.Redis(host='127.0.0.1', port=5379, decode_responses=True) rohan = { "Name" : "Rohan" , "Class" : 11 } client.hmset( "student" , mapping = rohan )

Redis OM 是一个基于 Redis 的高层次、面向对象的 API,用于数据管理和操作。它包括声明式对象映射、数据验证和序列化等主要功能。所有 Redis OM 模型都是 Pydantic 模型,允许使用 Pydantic 的强大且可扩展的数据验证功能。

在安装 Redis OM 之前,请确保正在使用Python3.7 或更高版本,并确保系统上运行着 Redis 服务器。可以直接从 Redis 官方网站下载 Redis,或者从 DockerHub 下载 Redis 的 Docker 文件。在 shell 或 CMD 中运行以下命令来下载和安装 Redis OM 模块:

pip install redis-om

这将安装 Redis-om 模块及其支持包。

Redis对象模型(Redis OM)是一个强大的工具,用于管理 Redis 中的数据。它为开发者提供了一个高层次、面向对象的 API,用于处理 Redis 数据,并简化了执行复杂数据操作的过程。在本节中,将探索如何开始使用 Redis-om 以及如何使用 Redis-om 定义数据模型。

from redis_om import HashModel from typing import Optional from pydantic import EmailStr class Student(HashModel): name: str age: int email: EmailStr about: Optional[str]

在上面的代码中,创建了一个继承自 HashModel 的 Student 模型。这里 HashModel 类是想要存储 Redis 哈希时使用的 Redis OM 类之一。哈希映射存储键值对,其中键是一个唯一的字符串。这个类允许使用 Pydantic 模型定义哈希映射的字段,这意味着可以为每个字段添加数据类型、约束和默认值。

当一个模型继承自 HashModel 时,它继承了 Redis OM 模型以及 Pydantic 模型。这意味着可以在 Pydantic 模型中应用的所有数据验证都可以在这里应用。这就是为什么可以添加 EmailStr,它是 Pydantic 库中可用的。

Redis 不支持嵌套哈希、集合或列表。因此,HashModel 不接受另一个哈希。现在让给 Student 模型分配一个变量:

karan = Student( name = "Karan", age = 28, email = "[email protected]", about = "I'm a Tech Geek" )

上述代码运行后,字段被提供并匹配它们各自的类型。现在,如果不提供 about 字段会怎样?什么也不会发生。因为该字段被设置为可选的。如果不提供 email 会怎样?代码会抛出一个验证错误,指出缺少一个字段。同样,当提供一个无效的电子邮件地址时,会再次抛出验证错误,指出 'value is not a valid email address'。这使得代码更加健壮,因此在处理缺失数据和数据验证方面节省了很多时间。

与通过 Redis-py 客户端访问字段值相比,从模型访问字段值要简单得多,必须使用 client.hget() 命令从 Redis 哈希中访问特定字段值。在 Redis-om 中,以以下方式访问值:

print(karan.email)

在上面的代码中,可以看到从模型访问字段值是多么简单,类似于如何访问类的属性,即以面向对象的方式。

Redis 是一个内存数据库,其关键特性之一是能够快速高效地处理大量数据。在本节中,将讨论如何使用 Redis OM 和主键(PKs)管理 Redis 中的数据。特别是,将涵盖如何保存、检索和使用 PKs 高效访问和操作 Redis 中的数据。到本文结束时,将能够理解如何使用 Redis OM 保存 Redis 中的数据以及如何使用 PKs 访问它。

Redis OM 允许以面向对象的方式操作数据。例如,要将数据模型保存到 Redis,调用该数据模型的 save() 函数。可以这样做:

karan.save()

现在 karan 变量中存储的数据在 Redis 上可用。但如何在代码中访问它呢?这可以通过主键来完成。Redis OM 在不与 Redis 服务器交互的情况下自动生成主键。在 Redis OM 中,PK 是用于标识和访问特定数据的惟一标识符。它用于高效访问和操作 Redis 中的数据。它的生成方式是全局唯一的。要获取数据的 PK,必须在该模型上调用 pk 函数。

如果知道模型的 PK,可以使用模型类上的 get() 函数检索模型的数据。下面的代码解释了一切。

print(karan.pk) # 输出 -> 01GQ2XE5MH935FS5H2WTGEY9DG print(Student.get(karan.pk)) # 输出 -> pk='01GQ2XE5MH935FS5H2WTGEY9DG' name='Karan' age=28 email='[email protected]' about="I'm a Tech Geek"

可以看到,通过在 Student.get() 中提供模型的 PK;可以检索数据。保存数据到 Redis 服务器后,知道数据现在存在于 Redis 中。那么,如何知道该特定 Redis 哈希的键名呢?可以使用 key() 检索哈希的键。

通过运行 HGETALL 命令在该键上,可以看到哈希已成功保存在 Redis 中,已经在 CLI 中检索了它。

127.0.0.1:6379> HGETALL :__main__.Student:01GQ2YYFG16Z166EJ4YAKXT4W

在 Redis 中,数据过期和删除是管理键值对生命周期的重要概念。过期允许为键设置一个时间限制,超过该时间限制后,键将自动被删除。这在缓存中很有用。删除允许从 Redis 数据库中手动移除键值对。

在 Redis OM 中,可以使用 expire() 方法实现数据过期。该方法接受两个参数,键和时间(以秒为单位)。例如,要使 karan 数据在 10 秒后过期,可以使用以下代码:

karan.expire(10)

运行上述代码后,为数据模型设置了 10 秒的过期时间。10 秒后,数据将从 Redis 服务器中删除。

与此类似的是 delete 函数。提供的参数是 PK。在模型上调用 delete() 函数会从Redis数据库中手动删除该模型。

Student.delete(karan.pk)
  • 它是管理 Redis 数据的强大工具。
  • 使用 Pydantic 模型,可以在数据保存到 Redis 之前验证其有效性。
  • 面向对象的特性简化了保存数据、添加过期和从Redis中检索数据的过程。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485