我计划用LeanCache做缓存。将存储服务的数据find或fetch到后,用cPickle序列化然后以objectId作为key存在Redis中。不同表的数据保存在同一个Redis实例中。
1 目前用cPickle序列化查询到的数据类会报错;若不用cPickle,直接保存查询到的数据类是存储成功的,但再取出来类型是有问题的。具体问题描述、代码、出错提示请见链接:
2 我对Redis和cPickle都没经验,请问是否推荐以上方案?我看到cPickle会将类中的函数也序列化,请问这样是否会导致因为fetch到的数据类实例中除了数据之外的其他函数也被序列化保存在了Redis中,从而占用了不必要的空间和序列化时间?
3 不同表的数据我想保存在一个Redis实例中,cPickle load的时候有没有办法知道数据的本来类型(在哪个表里)?(调用者当然是知道的,除了这个办法外有没有办法得知呢?不是__class__.__name__
,而是想知道是哪个表的数据)
4 Redis调用set数据保存的时候,如果有多条要保存,是否建议用pipeline的方式(在云引擎云端的云函数里调用Redis)?如果是,那么以下方法是否正确的方式呢?
a 在deploy初期全局的地方先建立Redis链接:
import os
import redis
r = redis.from_url(os.environ.get("REDIS_URL_<实例名称>"))
b 每次需要存储或者读取,都执行一遍以下代码:
pipe = r.pipeline(transaction=True)
r.set('key1','value1')
data = r.get('key2')
pipe.execute()