App Engine和创建私有缓存(java)

时间:2014-11-11 10:38:59

标签: google-app-engine

我知道App Engine有memcache构建它。我正在使用客观化,所以我只需要添加一个注释来使用它。

我看到了memcache解决方案的一个缺点,那就是Google可以控制。如果他们想释放服务器上的一些内存以提供另一个实例,那么他们可以清空我的缓存,我必须付钱才能重新填充它。

出于这个原因,我想知道如何创建我自己的缓存作为客观实体实例的哈希映射,但我有两个问题,我正在努力寻找信息。

  1. 如何监控实例的内存使用情况以确保我不会太接近128mb的限制?

  2. 我理解objectify在memcache中缓存属性而不是整个实体。有没有技术原因可以解释为什么我不能缓存实例客观化实体?

2 个答案:

答案 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会更好地处理序列化和反序列化,你的类可能会略有改变。在您自己的实例上进行自己的缓存时,您没有遇到此问题。但是,从多个实例中逐出旧项目总是很棘手,所以要小心。

相关问题