没有ReferenceProperty的memcache实体

时间:2009-07-20 09:57:29

标签: python google-app-engine memcached

我有一个我想要存储在memcache中的实体列表。该 问题是我有他们引用的大型模型 ReferenceProperty自动也存储在memcache中。 结果我超出了存储对象的大小限制 内存缓存。

是否有可能阻止ReferenceProperties 加载引用的模型,同时将它们放在memcache中?

我试过像

这样的东西
def __getstate__(self): 
    odict = self.__dict__.copy() 
    odict['model'] = None 
    return odict 

在我想要存储在memcache中的类中,但似乎没有 诀窍。

任何建议都将受到高度赞赏。

编辑:我通过添加__getstate__ - 方法执行的日志记录语句进行了验证。

2 个答案:

答案 0 :(得分:1)

对于大型实体,您可能希望通过将大型实体的键存储为ReferenceProperty以外的其他内容来手动处理相关实体的加载。这样,您可以选择何时加载大型实体以及何时不加载。只需使用长属性存储ID或字符串属性来存储键名。

答案 1 :(得分:0)

odict = self.copy()
del odict.model

可能比使用 dict 更好(除非getstate需要返回dict - 我不熟悉它)。不确定这是否解决了你的问题,但是......你可以在Model中实现 del 来测试它是否被释放。对我来说,看起来你仍然在某个地方有一个参考。

同时检查pickle模块 - 您必须将所有内容存储在单个密钥下,但它会自动保护您免受对同一对象的多次引用(仅存储一次)。对不起没有链接,移动客户端;)

祝你好运!