我有一个我想要存储在memcache中的实体列表。该 问题是我有他们引用的大型模型 ReferenceProperty自动也存储在memcache中。 结果我超出了存储对象的大小限制 内存缓存。
是否有可能阻止ReferenceProperties 加载引用的模型,同时将它们放在memcache中?
我试过像
这样的东西def __getstate__(self):
odict = self.__dict__.copy()
odict['model'] = None
return odict
在我想要存储在memcache中的类中,但似乎没有 诀窍。
任何建议都将受到高度赞赏。
编辑:我通过添加__getstate__
- 方法执行的日志记录语句进行了验证。
答案 0 :(得分:1)
对于大型实体,您可能希望通过将大型实体的键存储为ReferenceProperty以外的其他内容来手动处理相关实体的加载。这样,您可以选择何时加载大型实体以及何时不加载。只需使用长属性存储ID或字符串属性来存储键名。
答案 1 :(得分:0)
odict = self.copy()
del odict.model
可能比使用 dict 更好(除非getstate需要返回dict - 我不熟悉它)。不确定这是否解决了你的问题,但是......你可以在Model中实现 del 来测试它是否被释放。对我来说,看起来你仍然在某个地方有一个参考。
同时检查pickle模块 - 您必须将所有内容存储在单个密钥下,但它会自动保护您免受对同一对象的多次引用(仅存储一次)。对不起没有链接,移动客户端;)
祝你好运!