Python的Pickle+Redis序列化與反序列化爬坑小記

Python的Pickle+Redis序列化與反序列化爬坑小記

這裏記錄一下個人在項目中遇到的小坑

在python中將對象序列化並緩存在redis中,我一開始是這樣寫的

def demo():
	my_list = [1, 2, 3] # 定義被序列化的對象
    cache.hset('name', 'key', pickle.dumps(my_list)) # 序列化列表並緩存到redis
 	my_list2 = pickle.loads(self.cache.hget('name', 'key'))  # 讀取redis並反序列化
 	print(my_list2)

上述代碼看起來好像是沒問題的,也確實在redis中緩存成功了,在redis連接工具中能看到具體的值,但是取值卻報錯

{UnicodeDecodeError}'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

這個問題,我在網上查詢了大量資料之後發現,需要指定編碼,再緩存到redis,取值之後編碼再反序列化才OK

def demo():
	my_list = [1, 2, 3] # 定義被序列化的對象
    cache.hset('name', 'key', pickle.dumps(my_list).decode('latin1')) # 序列化列表並緩存到redis
 	my_list2 = pickle.loads(self.cache.hget('name', 'key').decode('latin1')) # 讀取redis並反序列化
 	print(my_list2)

運行結果

[1, 2, 3]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章