【问题标题】:Python redis rpop is resultng b'value' list structurePython redis rpop 是结果 b'value' 列表结构
【发布时间】:2017-02-17 09:01:00
【问题描述】:

我正在使用 docker compose 开发一个简单的 redis 和烧瓶项目。我的烧瓶使用 lpush、rpop 操作 redis 列表结构。在我使用像 brpop 这样的命令之前它工作得很好,现在我的所有结果都是 b'value'。我试图只使用第一个命令,但不知何故 b'value' 输出不断出现。知道什么可能导致这种情况吗?

**redis.lpush('moviestore','likemov')

itle = redis.rpop('moviestore')**

【问题讨论】:

  • 如果你在 Python 2 下,这是正常的,因为你推送了字节字符串值。如果您想要 Unicode 字符串,请在字符串前加上 u,即:u"moviestore"。
  • @LaurentLAPORTE 感谢您的提示。我将我的项目更改为 python 2,然后一切都像以前一样好。但是,在没有 b' ' 的情况下,我仍然需要在 python 3 中做什么才能获得我的值。

标签: python list redis docker-compose


【解决方案1】:

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 中是 Bytes 字符串,在 Python 3 中是 Unicode 字符串。
  • u'value'是一个Unicode字符串:py2 unicode / py3 str;
  • b'value' 是一个字节字符串:py2 str / py3 bytes

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 2020-11-22
    • 2013-07-19
    • 1970-01-01
    • 2018-02-26
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多