python redis get函数报错:
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x80 in position 0: invalid start byte
代码
try:
from redis import Redis
r = Redis(host='localhost', port=6379, decode_responses=True)
except Exception as exp:
logging.error("write meta_data of dataframe to redis failed")
for i in range(10):
key = random.randint(1,10000000)
t0 = time.time()
r.set(key, pickle.dumps(meta_data)) # meta_data是tuple
d = r.get(key) # 执行到这一步报错
meta = pickle.loads(d)
sum+=(time.time() - t0)
解决方案:不使用pickle,使用str()
将 meta_data转化为str ,然后使用eval()
函数提取复原
try:
from redis import Redis
r = Redis(host='slave016', port=6379, decode_responses=True)
except Exception as exp:
logging.error("write meta_data of dataframe to redis failed")
for i in range(10):
key = str(random.randint(1,10000000))
t0 = time.time()
meta_data = str(meta_data)
r.set(key,meta_data)
d = r.get(key)
meta = eval(d)