序列化概述:
程序运行结束后,在内存中运行的变量,会被操作系统回收。序列化,就是把内存里的变量进行存储到硬盘中。反之称为反序列化
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()
测试结果: