【问题标题】:Python-redis: get binary data after a client was set up with decode_responses=TruePython-redis:使用 decode_responses=True 设置客户端后获取二进制数据
【发布时间】:2020-07-30 00:28:53
【问题描述】:

因此,根据this answerthat answer 中的出色建议,我决定将整个地方的一大堆encode/decode 与UTF-8 替换为一个:

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

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

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

【问题讨论】:

    标签: python redis


    【解决方案1】:

    这是我想出的。不确定它将如何处理复杂的连接以及它可能会破坏什么。只是不要用它来驾驶你的自动驾驶汽车......

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 2014-12-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2014-08-16
      • 1970-01-01
      • 2017-05-27
      相关资源
      最近更新 更多