我知道App Engine有memcache构建它。我正在使用客观化,所以我只需要添加一个注释来使用它。
我看到了memcache解决方案的一个缺点,那就是Google可以控制。如果他们想释放服务器上的一些内存以提供另一个实例,那么他们可以清空我的缓存,我必须付钱才能重新填充它。
出于这个原因,我想知道如何创建我自己的缓存作为客观实体实例的哈希映射,但我有两个问题,我正在努力寻找信息。
如何监控实例的内存使用情况以确保我不会太接近128mb的限制?
我理解objectify在memcache中缓存属性而不是整个实体。有没有技术原因可以解释为什么我不能缓存实例客观化实体?
答案 0 :(得分:1)
我假设这是针对谷歌应用引擎 - python。
是。我们正在使用目前处于生产状态的cachepy取得了不错的成功。
https://code.google.com/p/cachepy/
请注意,这是一个特定于实例的缓存机制。
因此,您可以使用cachepy在每个实例上缓存它,也可以在继承到数据存储区之前使用memcache作为后备。
因此,当cachepy上发生缓存未命中时,您可以查看内存缓存,当缓存未命中时,您可以回退以从数据存储中获取缓存。
为了监控使用情况,你可以做这样的事情(虽然我不确定它是否会像我打算一样工作)
关于cachepy上的set函数 https://code.google.com/p/cachepy/source/browse/cachepy.py#65
您可以使用sys.getsizeof
添加检查以查看缓存的大小,并抛出MemoryError
或类似内容。
答案 1 :(得分:1)
请注意,还有专门的memcache,这可能是一个更容易的解决方案。
但为了确保不超过内存限制,您可以使用Ehcache之类的内容并配置限制。
关于你的第二个问题:据我所知,当你部署一个新版本时,Objectify会更好地处理序列化和反序列化,你的类可能会略有改变。在您自己的实例上进行自己的缓存时,您没有遇到此问题。但是,从多个实例中逐出旧项目总是很棘手,所以要小心。