序列化概述:
程序運行結束後,在內存中運行的變量,會被操作系統回收。序列化,就是把內存裏的變量進行存儲到硬盤中。反之稱爲反序列化
pickle:
pickle是python自帶的一個包,提供了序列化和反序列化操作。
pickle.load()方法,可以從文件中反序列化出對象。
pickle.dump()方法,可以直接把對象序列化後寫入文件中。、
代碼實現:
在memory.py中,導入我們將要用到的包,並創建Memory類
import pickle
import os.path
class Memory:
"""
一個簡單的內存類用於封裝項目操縱的數據對象
volatile是未保存的內存
"""
volatile = {}
def __init__(self):
self.load_state() # 創建時啓動載入函數
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
self.save_state() # 退出時啓用保存函數
# 執行save命令:同步保存操作,將當前redis實例的所有數據快照以rdb的形式保存到硬盤。
def save_state(self):
pickle.dump({'volatile': self.volatile}, open('dump.rdb', 'wb'))
print("dump.rdb saved to disk") # 測試用
def load_state(self):
if os.path.exists('dump.rdb'): # 如果存在rdb快照
state = pickle.load(open('dump.rdb', 'rb')) # 載入快照
# 分別讀取分序列化後相應的值
self.volatile = state['volatile']
print("dump.rdb loaded into volatile memory") #測試用
memory = Memory()
打開終端,進入python3交互環境中,輸入以下代碼測試:
>>>from memory import memory
>>>memory.volatile['key'] = 'value'
>>>memory.save_state()
測試結果: