RESP 3 功能#

从 5.0 版本开始,redis-py 支持 RESP 3 标准。实际上,这意味着使用 RESP 3 的客户端将更快、性能更高,因为客户端中发生的类型转换更少。这也意味着新的响应类型(如双精度浮点数、简单字符串、映射和布尔值)可用。

连接#

启用 RESP3 与 redis-py 中的其他连接没有区别。在所有情况下,必须通过设置 protocol=3 来扩展连接类型。以下是说明如何启用 RESP 3 连接的一些基本示例。

使用标准连接连接,但指定 resp 3

>>> import redis
>>> r = redis.Redis(host='localhost', port=6379, protocol=3)
>>> r.ping()

或使用 URL 方案

>>> import redis
>>> r = redis.from_url("redis://localhost:6379?protocol=3")
>>> r.ping()

使用异步连接,指定 resp 3

>>> import redis.asyncio as redis
>>> r = redis.Redis(host='localhost', port=6379, protocol=3)
>>> await r.ping()

异步客户端的 URL 方案

>>> import redis.asyncio as Redis
>>> r = redis.from_url("redis://localhost:6379?protocol=3")
>>> await r.ping()

使用 RESP 3 连接到 OSS Redis 集群

>>> from redis.cluster import RedisCluster, ClusterNode
>>> r = RedisCluster(startup_nodes=[ClusterNode('localhost', 6379), ClusterNode('localhost', 6380)], protocol=3)
>>> r.ping()

推送通知#

推送通知是 Redis 发送带外数据的一种方式。RESP 3 协议包含一个 推送类型,允许我们的客户端拦截这些带外消息。默认情况下,客户端会记录简单的消息,但 redis-py 包含将自己的函数处理器带入的能力。

这意味着,如果您想对给定的推送通知执行某些操作,您可以在连接期间指定一个函数,如以下示例所示

>> from redis import Redis
>>
>> def our_func(message):
>>    if message.find("This special thing happened"):
>>        raise IOError("This was the message: \n" + message)
>>
>> r = Redis(protocol=3)
>> p = r.pubsub(push_handler_func=our_func)

在上面的示例中,在收到推送通知时,而不是记录消息,在出现特定文本的情况下,会引发 IOError。此示例突出显示了如何开始实现自定义消息处理程序。