原因:在python3中redis连接包读取数据默认返回byte类型。存进去的是字符串类型的数据,取出来却是字节类型的。

            Python2取出来的就是字符串类型的。

import platform

import redis

if "inux" in platform.system():
    print("检测到是服务器环境,启动redis内网链接")
    IP = "xxx.xx.x.xx"
    PORT = 6379
else:
    IP = "xxx.xxx.xxx.xx"
    PORT = 6379
# 存进去的是字符串类型的数据,取出来却是字节类型的
redisPool1 = redis.ConnectionPool(host=IP, port=PORT, db=1, password="xxxxxxx")

if __name__ == '__main__':
    client = redis.Redis(connection_pool=redisPool1 )
    client.set("ACCESS_TOKEN", "ABC123456", 60 * 60)
    token = client.get("ACCESS_TOKEN")
    print(token)  # b'ABC123456'
    print(type(token))  # <class 'bytes'>

解决方法:连接redis的时候,加上decode_responses=True或者每次取出来都decode一下(太麻烦,不推荐)

import platform

import redis

if "inux" in platform.system():
    print("检测到是服务器环境,启动redis内网链接")
    IP = "xxx.xx.x.xx"
    PORT = 6379
else:
    IP = "xxx.xxx.xxx.xx"
    PORT = 6379
# 存进去的是字符串类型的数据,取出来也是字符型
redisPool1 = redis.ConnectionPool(host=IP, port=PORT, db=1, password="xxxxxxx", decode_responses=True)

if __name__ == '__main__':
    client = redis.Redis(connection_pool=redisPool1 )
    client.set("ACCESS_TOKEN", "ABC123456", 60 * 60)
    token = client.get("ACCESS_TOKEN")
    print(token)  # ABC123456
    print(type(token))  # <class 'str'>

 

更多推荐