python - 在redis中保存unicode但获取错误

标签 python 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' codec can't decode byte 0xe6 in position 12: ordinal not in range(128)

谁能给些建议?谢谢你

最佳答案

我想我已经发现了问题所在。读完这篇文章后,我不得不从 redis 中显式解码,这很痛苦,但有效。

我偶然发现了一篇博文,其中作者的输出全是 unicode 字符串,这与我的明显不同。

查看 StrictRedis.__init__ 有一个参数 decode_responses,默认情况下为 Falsehttps://github.com/andymccurdy/redis-py/blob/273a47e299a499ed0053b8b90966dc2124504983/redis/client.py#L446

在构造上传递 decode_responses=True,对我来说这解决了 OP 的问题。

关于python - 在redis中保存unicode但获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10599147/

相关文章:

security - 如何通过命令行安全地连接到 Heroku Redis?

java - 如何将 Spring Cache Redis 与自定义 RestTemplate 一起使用?

python - 没有特定字符的压缩数据的 Ascii 表示

python - 由于一维尺寸更好,程序会吐出轴错误,是因为我最终混合了吗?

Python - 将 Matplotlib 轴从几天更改为几年

lua - Lua中HGETALL的返回类型是什么

redis - 在Redis 5.9.102上使用CLIENT KILL USER <用户名>的语法错误

python - 连接几个股票价格数据框

python - 无法在每个水平条形图的顶部添加值

java - 我可以拥有同名的集合和 hset 吗?