我正在使用 docker compose 开发一个简单的 redis 和 flask 项目。我的 flask 使用 lpush、rpop 操作 redis 列表结构。在我使用像 brpop 这样的命令之前,它工作得很好,现在我的所有结果都变成了 b'value'。我尝试只使用第一个命令,但不知何故 b'value' 输出不断出现。知道是什么原因造成的吗?
**redis.lpush('moviestore','likemov')
itle = redis.rpop('moviestore')**
最佳答案
redis 字符串似乎是 Python 字节字符串(参见有关 Data Types 的文档)。
因此,我认为在 Python 3 中(可能在 Python 2 中也存在)从 Unicode 到字节的自动转换。
要使用 Unicode 字符串,您可以对字符串进行编码/解码(例如使用 UTF8 编码):
redis.lpush('moviestore', u'likemov'.encode('utf8'))
...
itle = redis.rpop('moviestore').decode('utf8')
总结:
- 在 Redis 中存储 Unicode 字符串:您对其进行编码,
- 从 Redis 检索 Unicode 字符串:您对其进行解码。
注意区别:
- 默认情况下,'value' 是一个
str
,它在 Python 2 中是字节字符串,在 Python 3 中是 Unicode 字符串。 - u'value'是一个Unicode字符串:py2
unicode
/py3str
; - b'value' 是字节字符串:py2
str
/py3bytes
。
关于Python redis rpop 是 resultng b'value' 列表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39932873/