保存memcache数据后,它是否可以立即在GAE上使用?

时间:2011-03-02 14:37:09

标签: python google-app-engine caching memcached

在Google App Engine(python)上,我需要使用memcache保存数据并快速在另一页上阅读。

但是在我开始编码以保存memcache之前,然后在下一页我用已知密钥打开数据,我开始怀疑下一页上的数据是否总是存在?缓存数据需要多长时间,并且可靠地在下一页上阅读?这是一个问题,因为它是一个云服务,或者这是一个问题,即使它是在一台服务器上?或者它不是一个问题,我可以指望它在下一页就在那里?

注意:此方法不是我的webapp的主干,它只是我需要在一个场景中使用的特殊情况。此外,对于这种情况,我不希望在具有查询字符串,cookie或标头值的页面之间保留数据。

3 个答案:

答案 0 :(得分:3)

我不相信memcached的GAE实现有什么特别之处,所以缓存的值在设置后会立即可用,所以是的,它将在下一页上提供,除非它已过期,因为memcached服务器命中这是内存限制。谷歌似乎没有限制你可以存储在memcache中的数据量,只有你可以提出的请求数量,所以实际上我怀疑这是一个问题。

依靠可用的缓存值并不是一个好习惯,在所有情况下都应该使用类似下面的模式。

key = generate_key()
value = memcache.get(key)
if value is None:
    value = generate_value()
    memcache.set(key, value)

答案 1 :(得分:3)

分布式memcache架构有一个memcache实例池,可以为所有Google App Engine应用程序提供服务;存储的数据不会在memcache服务器之间复制。

在memcache上成功保存数据后,您的数据将在 * 中用于任何后续请求,因为它存储在一个特定的memcache实例中。

*一个警告:在内存不足的情况下,可能会从缓存中清除值

答案 2 :(得分:2)

在实践中,这些数据可能会在大多数情况下存在,但您无法依靠它设计 - 请参阅docs

  

然而,在考虑是否   仅在memcache中存储一个值   并没有其他持久性的支持   存储,请确保您的应用程序   当值为时,表现可接受   突然没有。 值可以   随时从memcache过期,   并且可能在之前到期   为该值设置的到期截止日期。   例如,如果突然缺席   用户的会话数据会导致   会话故障,该数据   应该存储在   除了memcache之外的数据存储区。

(强调我的)