redis-py 和 hgetall 行为

新手上路,请多包涵

我玩过烧瓶微框架,想在 redis 中缓存一些统计数据。假设我有这个字典:

 mydict = {}
mydict["test"] = "test11"

我将它保存到redis

 redis.hmset("test:key", mydict)

然而恢复后

stored = redis.hgetall("test:key")
print(str(stored))

我看到很奇怪 {b'test': b'test11'} 所以 stored.get("test") 没有给我

mydict str 方法结果看起来不错 {'test': 'test11'} 。那么,为什么将这个二进制标记添加到恢复的数据中呢?我还检查了 redis-cli,但没有看到明确的 b 标记。 hgetall 有问题吗?

原文由 Tommi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 539
1 个回答

这是预期的行为。默认情况下,来自 Redis 的字符串不会被解码。你有几个选择:

  • 自己解码数据。
  • 使用 decode_responses 参数创建客户端实例,例如 StrictRedis(decode_responses=True) 。这将根据 charset 参数(默认为 utf-8)解码来自 Redis 的所有字符串。只有这样做才能确定来自 Redis 的每个响应都包含要解码为 utf-8 的字符串数据。如果您使用相同的客户端实例来获取二进制数据(如腌制对象),则不应使用此选项。在这种情况下,我建议为二进制数据使用单独的客户端实例。

资料来源: https ://github.com/andymccurdy/redis-py/issues/463#issuecomment-41229918

原文由 fnkr 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进