应用引擎上的可靠分布式缓存(Java)

时间:2013-01-12 11:23:28

标签: java google-app-engine caching

我需要在内存中保留一些值,类似于内存中的数据库。在可靠性方面,我并不担心系统故障,我可以忍受。但是,我不能使用memcache服务,因为值可以随时被驱逐。当应用程序扩展时,我需要在其他机器上可用的值。我认为appengine不会进行内存扩展或将它(例如,如果我保留普通Java集合中的值)?

我想在这里实现的是“选择昵称”服务。这分两步进行。首先,用户保留一个昵称。然后他注册了昵称。昵称存储在一个实体组下(原文如此!)。因此,我需要避免数据存储争用。

据我所知https://developers.google.com/appengine/articles/scaling/memcache我可以在某种程度上依赖于memcache中的值不应该被任意的resons驱逐。但是,我必须指望这种情况会不时发生(例如在高内存级别上)。这种价值损失对我的用户来说非常不愉快。

2 个答案:

答案 0 :(得分:1)

您的应用程序共享一个Memcache实例,它不是“机器”(或者更确切地说是您的应用程序实例)的本地实例。

因此,如果您正在运行2个实例并且它们都从内存缓存中检索相同的值,则它们将获得相同的值。

在云中运行“内存”数据库是不可行的 - 您计划使用的内存是什么内存,实例中的内存即将关闭?

https://developers.google.com/appengine/articles/scaling/memcache

  

在设计应用程序时,请花些时间考虑可以缓存哪些数据集以供将来重用。这些可能是常见的页面或经常读取数据存储区实体,仅举几例。您的应用程序中可能还有一些数据要在应用程序的所有实例之间共享,但不需要永久保留。在这种情况下,memcache可以通过为瞬态数据提供快速有效的分布式存储系统来提高应用程序的可伸缩性。将memcache逻辑添加到服务器端代码通常非常值得花费额外的几行代码。

答案 1 :(得分:0)

使用Python27时,可以使用app引擎NDB。 NDb是一个具有自动缓存功能的数据存储区。

其他机器?您的意思是在同一个应用的实例之间共享。