Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 应用程序引擎和创建专用缓存(java)_Google App Engine - Fatal编程技术网

Google app engine 应用程序引擎和创建专用缓存(java)

Google app engine 应用程序引擎和创建专用缓存(java),google-app-engine,Google App Engine,我知道appengine有memcache构建它。我正在使用objectify,所以我所要做的就是添加一个注释来使用它 我看到了memcache解决方案的一个缺点,那就是谷歌拥有控制权。如果他们想在服务器上释放一些内存来提供另一个实例,那么他们可以清空我的缓存,我必须付费重新填充 出于这个原因,我想知道如何创建自己的缓存作为objectify实体实例的hashmap,但我有两个问题,我很难找到相关信息 如何监控实例的内存使用情况,以确保不会太接近128mb的限制 我理解objectify在mem

我知道appengine有memcache构建它。我正在使用objectify,所以我所要做的就是添加一个注释来使用它

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


出于这个原因,我想知道如何创建自己的缓存作为objectify实体实例的hashmap,但我有两个问题,我很难找到相关信息

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

  • 我理解objectify在memcache中缓存属性而不是整个实体。我不能缓存实例对象化实体,这有技术原因吗


  • 我假设这是针对google应用程序引擎-python的

    对。我们正在使用目前正在生产中的cachepy,并取得了不错的成功

    请注意,这是一种特定于实例的缓存机制

    因此,您可以使用cachepy对每个实例进行缓存,并在分发到数据存储之前将其作为备用项缓存到memcache

    因此,当cachepy上发生缓存未命中时,您可以查找memcache,当memcache上发生缓存未命中时,您也可以回过头来从数据存储中获取它

    为了监视使用情况,您可以这样做(尽管我不确定它是否会像我在gae中所希望的那样工作)

    关于cachepy上的set函数


    您可以使用sys.getsizeof添加检查以查看缓存的大小,并抛出一个
    MemoryError
    或类似的东西。

    注意,还有专用的memcache,这可能是一个更简单的解决方案

    但是为了确保不超过内存限制,您可能可以使用类似于Ehcache的东西并配置一个限制


    至于你的第二个问题:据我所知,Objectify的行为是这样的,以便在部署新版本时更好地处理序列化和反序列化,并且类可能会有轻微的更改。当您在自己的实例上进行自己的缓存时,您不会遇到这个问题。但是,从多个实例中逐出旧项总是很棘手的,所以要小心。

    创建我自己的缓存作为objectfify实体的哈希映射?你是说实例缓存吗?@Bharath是的,缓存对象的实例。抱歉,这不是很清楚。应用程序引擎请求将选择随机实例。因此,这将为您的实例添加权重。你准备好了吗?@Bharath我知道memcache可以跨应用程序实例工作,而我的缓存只能在创建它的应用程序实例中工作。但在我看来,使用备用内存进行第二次缓存并没有任何危害或成本。如果需要,Memcache仍然可以依靠。除非我有什么误会,你完全对了。但是如果你需要从地图上删除一些项目,可能会有一些问题。我使用的是Java,但是很高兴知道已经存在一些解决方案,所以这是可能的。