【问题标题】:After saving memcache data, is it immediately available on GAE?保存 memcached 数据后,是否可以立即在 GAME 上使用?
【发布时间】:2011-03-02 14:37:09
【问题描述】:

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

但是在我开始编码以保存 memcache 之前,在下一页我用已知键打开该数据之前,我开始怀疑数据是否会一直存在于下一页上?缓存数据需要多长时间,并可靠地在下一页上读取?这是一个问题,因为它是一个云服务,还是即使它在一台服务器上也会是一个问题?或者它根本不是问题,我可以指望它出现在下一页?

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

【问题讨论】:

    标签: python google-app-engine caching memcached


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      依赖可用的缓存值并不是一个好习惯,在所有情况下,您都应该使用如下所示的模式。

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

      【讨论】:

      • 问题我找不到答案—— GAE 版本的 memcache 已分发,但我找不到有关其工作原理的详细信息。是否有可能在 OP 的情况下,第 1 页和第 2 页由不同的服务器处理,如果是,它们是否可以访问 memcached 数据?
      • 您使用的密钥是经过哈希处理的,每个内存缓存服务器处理哈希空间的不同部分。因此,如果客户端被配置为使用相同的内存缓存服务器集,那么它们将针对相同的密钥查看相同的特定服务器。如果两个请求由不同的数据中心处理,它们可能不会使用同一组服务器,因此无法访问相同的数据。作为一个单独的 SO 问题,这会更好:-)
      【解决方案3】:

      在实践中,这些数据可能大部分时间都在那里,但你不能指望它,根据设计——请参阅docs

      但是,在考虑是否 仅在内存缓存中存储一​​个值 并且没有其他持久的支持 存储,请确保您的应用程序 当值为 突然不可用了。 值可以 随时从内存缓存中过期, 并且可能在 为值设置的到期期限。 例如,如果突然缺席 用户的会话数据会导致 会话发生故障,该数据 可能应该存储在 除了 memcache 之外的数据存储。

      (强调我的)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多