2016-10-08 96 views
0

我正在使用docker撰写简单的redis和flask项目。我的烧瓶manuplates redis列表结构使用lpush,rpop。它运行良好,直到我正在玩像brpop这样的命令,现在所有的结果都是b'value'。我试着只使用第一个命令,但不知何故b'值输出不断。任何想法可能会导致这种情况?Python redis rpop是resultng b'value'列表结构

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

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

如果你是在Python 2下,这是正常的,因为你推送字节字符串值。如果您需要Unicode字符串,请在u前面加上字符串,即:u“moviestore”。 –

+0

@LaurentLAPORTE感谢您的提示。我改变了我的项目到Python 2,然后一切都像以前一样好。但是,仍然我需要做什么在python三,以获得我的价值观没有b''。 – Ftalem

回答

1

看来,Redis的字符串是Python的字节字符串(请参阅文档有关Data Types)。

所以,我认为在Python 3中有一个从Unicode到Bytes的自动转换(也可能在Python 2中)。

要使用Unicode字符串时,您可以编码/解码刺(使用UTF8编码实例):

redis.lpush('moviestore', u'likemov'.encode('utf8')) 
... 
itle = redis.rpop('moviestore').decode('utf8') 

总结:

  • 将Unicode字符串存储在Redis的:你编码它,
  • 检索来自Redis的Unicode字符串:您解码它。

通知的差异:

  • 默认“值”是一个str其是在Python 2字节串和在Python 3的Unicode字符串
  • u'value”是Unicode字符串:py2 unicode/py3 str;
  • b'value'是一个字节字符串:py2 str/py3 bytes