【问题标题】:Why is Redis returning 2 different types when the same key is accessed by 2 different windows?当 2 个不同的窗口访问同一个键时,为什么 Redis 返回 2 种不同的类型?
【发布时间】:2017-06-05 14:52:32
【问题描述】:

我正在使用 Python 和 redis-py Python 客户端与同一个 Redis 通信,该 Redis 由 Redis Labs 作为 Redis(e) Cloud 提供。在终端中,检索一个键,并将值作为字符串类型返回。

而当我在 IDE 中运行代码文件时,相同的代码会返回一个字节对象。

我不明白他们为什么返回不同的类型。我屏蔽了 Redis 主机和端口的详细信息,但它们访问的是同一个 Redis,并且在截取这 2 个屏幕截图之间我没有更改任何内容。

【问题讨论】:

  • 你的 IDE 使用的是不同的 python 版本吗?
  • @olisch 伟大的苏格兰人!是的,他们是!终端正在使用 python,并且 IDE 已设置为使用 python3。非常感谢:)
  • @olisch 我已经运行了 pip install redis 和 pip3 install redis。你知道为什么 python3 以二进制形式返回它吗?

标签: python redis


【解决方案1】:

这不是 redis 的问题,而是 Py2 和 Py3 的区别。

Python 3.0 使用文本和(二进制)数据的概念,而不是 Unicode 字符串和 8 位字符串。所有文本都是 Unicode;然而,编码的 Unicode 被表示为二进制数据。用来保存文本的类型是str,用来保存数据的类型是字节。与 2.x 情况的最大区别在于,任何在 Python 3.0 中混合文本和数据的尝试都会引发 TypeError,而如果您要在 Python 2.x 中混合 Unicode 和 8 位字符串,如果 8 位string 恰好只包含 7 位 (ASCII) 字节,但如果它包含非 ASCII 值,您会得到 UnicodeDecodeError。多年来,这种特定于价值的行为引起了无数悲伤的面孔。

【讨论】:

    猜你喜欢
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多