2011-03-02 20 views
1

在Google App Engine(python)上,我需要使用memcache保存数据并在另一页上快速读取数据。保存memcache数据后,GAE立即可用吗?

但是在我开始编码以保存memcache之前,然后在下一页我用已知密钥打开这些数据,我开始怀疑数据是否会一直存在于下一页上?需要多长时间来缓存数据,并可靠地在下一页阅读?这是一个问题,因为它是一项云服务,或者即使它位于一台服务器上,这也会成为问题吗?或者这不是一个问题,我可以指望它在下一页出现吗?

注:此方法不是我的web应用程序的中枢,它只是我需要用于一种情况的特例。另外,对于这种情况,我不想在查询字符串,Cookie或标题值的页面之间持久保存数据。

回答

3

分布式内存缓存体系结构有一个memcache实例池,它服务于所有Google App Engine应用程序;存储的数据不会在内存缓存服务器之间复制。

将数据成功保存到memcache后,您的数据将存在*,因为它存储在一个特定的Memcache实例中。

*一个警告:值可以从高速缓存在内存不足

2

在实践中,这些数据可能会在那里的大部分时间,但你不能指望它,通过设计 - 看docs:当考虑

然而,是否 存储值仅在内存缓存 中,而不是由其他持久性内存 支持,请确保您的应用程序 在值为 时突然不可用时的行为可以接受。 值 可以随时从内存缓存中到期, ,并且可以在为该值设置的 到期截止日期之前过期。 例如,如果突然缺失用户的会话数据将导致会话出现故障,则除了memcache以外,该数据 可能应该存储在 数据存储中。

(重点煤矿)

3

我不相信有什么特别与GAE实现这样的memcached缓存值将可它们被设置后,所以是的,这将是可用在下一页上,除非因为memcached服务器达到内存限制而过期。谷歌似乎并没有限制你可以在memcache中存储多少数据,只有你可以提出的请求数量,所以实际上我怀疑这是一个问题。

依赖缓存值是不好的做法,在所有情况下,您都应该使用下面的模式。

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

问题我无法找到答案的情况下被驱逐 - 内存缓存的GAE版本distrubuted,但我无法找到有关如何工作的细节。在OP的情况下,第1页和第2页是否可能由不同的服务器处理,如果可以,他们是否可以访问memcached数据? – bgporter 2011-03-02 15:11:26

+0

您使用的密钥被散列,每个memcache服务器处理散列空间的不同部分。因此,如果客户端被配置为使用同一组memcache服务器,那么他们将查看同一个密钥的相同特定服务器。如果两个请求由不同的数据中心处理,它们不会使用同一组服务器,则可能无法访问相同的数据。这将作为一个单独的SO问题更好:-) – 2011-03-02 15:41:45

相关问题