Pythonredis:在客户机设置为decode_responses=True后获取二进制数据

2024-05-16 16:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,根据this answerthat answer中的出色建议,我决定用一个单独的

rdb = redis.StrictRedis(..., encoding='utf-8', decode_responses=True)

但是,正如其他人在对上述答案的评论中指出的那样,这种连接无法“处理二进制数据”。(小点:我有点不同意:“decode_responses”是一个很好的名称:响应是无条件地从二进制转换为字符串的,但仍然可以存储任意二进制数据,只是不能检索)

因此,由于没有一种方法可以简单地覆盖单个查询的decode_responses设置,我想知道是否有一种方法可以从现有的客户机派生一个新的客户机,参数基本相同?这样,我就可以用decode_responses=False创建一个新的客户机来检索我知道是二进制的数据


Tags: 数据方法answerredis客户机that二进制responses
1条回答
网友
1楼 · 发布于 2024-05-16 16:16:18

这是我想到的。不确定它将如何处理复杂的连接,以及它可能会中断什么。只是别让你的自动驾驶汽车带着那个

def new_client(client, **kwargs):
    """return a new Redis client based on an existing one,
    with some kwargs modified.
    """
    kwargs = {**client.connection_pool.connection_kwargs, **kwargs}
    return redis.StrictRedis(**kwargs)

有了这个,我们现在可以做,例如:

client.set(name, pickle.dumps(stuff))

...

# later
with new_client(client, decode_responses=False) as binclient:
    data = binclient.get(name)
stuff = pickle.loads(data)

相关问题 更多 >