解决 Python 3 调用 Redis 字符串显示 b 前缀的问题
昨天有按照网上的教程去使用 Python 调用Redis ,代码很简单,就像下面这样子:
但是,运行后的结果显示 b’python’ ,多了一个b,但是获取字符长度的确又是对的,觉得很是奇怪。
今天有向同事妹子请教,后来得出的结论是用回 python 2.7。和妹子继续搜索,发现了解决方法:sys.stdout.buffer.write(r.get(“name”)) ,这么一来需要再引入 sys 库,而且需要自己添加换行符了。
继续搜索,我们可以使用 print(r.get(‘name’).decode(‘utf-8’)),即解码一下然后再显示。稍微好了一点,但是每次要读取 Redis 数值的时候,都要这么来转换下确实显得有点猥琐。
我在想,一定还有更简单的方式。最后看到 stackoverflow 和简书上也讨论了这个事情,有一个剑走偏锋的设置,就是在数据库的连接字符串里多添加一个参数 decode_responses=True,这么一来就会自动将 response 解码。这么做大多数情况下是没有问题的,需要额外注意的是,如果保存在 Redis 数据库里的原始数据就是二进制的,那么通过这种方式,可能得不到自己想要的结果。
在实际运用的时候,就可以灵活考虑了,适当的时候综合使用这两种方式。