我如何从使用 msgpack 编码的 redis 访问数据?

How do i access data from redis encoded wth msgpack?

我有一些 enc_data,其中 msgpack 来自 redis。 我已经按如下方式设置了哨兵和连接:

sentinel = Sentinel([('localhost','26379')], decode_responses=False)          
conn = sentinel.master_for('foo', socket_timeout=0.5, decode_responses=False)

我在两个地方都使用了 decode_responses,因为我无法确定哪个真正有效。 接下来我正在读取我的数据并对其进行解码

enc_data = conn.get('msgpack:data:key')
data = msgpack.loads(enc_data)

我看到的

data.keys()
########################################
dict_keys([b'key_0', b'key_1', b'key_2', b'key_3'])

但是

print(data.get('key_0'))
#######################################
None

你能指出我在解码或访问这些数据时做错了什么吗?

所以...

class Unpacker(object):
    """Streaming unpacker.

    :param bool raw:
        If true, unpack msgpack raw to Python bytes (default).
        Otherwise, unpack to Python str (or unicode on Python 2) by decoding
        with UTF-8 encoding (recommended).
        Currently, the default is true, but it will be changed to false in
        near future.  So you must specify it explicitly for keeping backward
        compatibility.

        *encoding* option which is deprecated overrides this option.

此选项需要设置为 False 一切都像魔术一样。

data = msgpack.loads(enc_data, raw=False)