我正在一个应用程序中使用flask-cache,并尝试在单独的进程中预填充缓存。问题是我无法确定缓存值的格式。
查看缓存值时,它们看起来像已经被pickle处理过的,但被缓存函数创建的值与正常的pickle值有所不同,不能直接反pickle回来。下面是一个示例:
这是我的Flask视图函数:
注意缓存的字节串有一个前导'!'。与手动pickling 'foo'进行比较:
后者可以被反序列化,但尝试反序列化flask-cache值会导致错误"_pickle.UnpicklingError: invalid load key, '!'."由于我不完全理解问题,因此不愿意实施解决方案(例如删除/添加所有字节字符串上的"!")。我这么做正确吗?
查看缓存值时,它们看起来像已经被pickle处理过的,但被缓存函数创建的值与正常的pickle值有所不同,不能直接反pickle回来。下面是一个示例:
这是我的Flask视图函数:
@app.route('/index')
@cache.cached(timeout=60)
def index():
return 'foo'
以下是我的视图中存储在Redis中的缓存值:
>>> r = redis.StrictRedis()
>>> r.keys()
[b'flask_cache_view//index']
>>> r.get('flask_cache_view//index')
b'!\x80\x03X\x03\x00\x00\x00fooq\x00.'
注意缓存的字节串有一个前导'!'。与手动pickling 'foo'进行比较:
>>> import pickle
>>> pickle.dumps('foo')
b'\x80\x03X\x03\x00\x00\x00fooq\x00.'
后者可以被反序列化,但尝试反序列化flask-cache值会导致错误"_pickle.UnpicklingError: invalid load key, '!'."由于我不完全理解问题,因此不愿意实施解决方案(例如删除/添加所有字节字符串上的"!")。我这么做正确吗?