将Unicode保存为Redis但获取错误

我正在使用mongodb和redis,redis是我的缓存。

我用redis-py缓存mongodb对象:

obj in mongodb: {u'name': u'match', u'section_title': u'\u6d3b\u52a8', u'title': 

u'\u6bd4\u8d5b', u'section_id': 1, u'_id': ObjectId('4fb1ed859b10ed2041000001'), u'id': 1}

使用hgetall(key,obj)从redis获取的obj是:

{'name': 'match', 'title': '\xe6\xaf\x94\xe8\xb5\x9b', 'section_title': 

'\xe6\xb4\xbb\xe5\x8a\xa8', 'section_id': '1', '_id': '4fb1ed859b10ed2041000001', 'id': '1'}

如您所见,从缓存中获取的obj是str而不是unicode,因此在我的应用中出现错误,例如:’ascii’编解码器无法解码位置12的字节0xe6:序数不在范围(128)中

任何人都可以提出建议吗?感谢你

回答:

如果您使用的是第三方库(例如)django-redis,则可能需要指定一个自定义的ConnectionFactory

class DecodeConnectionFactory(redis_cache.pool.ConnectionFactory):

def get_connection(self, params):

params['decode_responses'] = True

return super(DecodeConnectionFactory, self).get_connection(self, params)


假设您使用的是redis-

py,最好传递str而不是传递unicode给Redis,否则Redis会自动将其编码为*set命令,通常使用UTF-8编码。对于*get命令,Redis不了解值的形式类型,而只需要str直接返回值即可。

因此,正如Denis所说,将对象存储到Redis的方式至关重要。您需要转换值以str使Redis层对您透明。

另外,将默认编码设置为UTF-8,而不要使用ascii

以上是 将Unicode保存为Redis但获取错误 的全部内容, 来源链接: utcz.com/qa/400724.html

回到顶部