我如何从使用 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)
我有一些 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)