如何缓存RSS提要?

时间:2012-10-01 16:39:09

标签: google-app-engine caching rss

我使用来自GAE NDB数据存储区的最新10条记录生成RSS提要。数据库中的记录每周更新一次。每次用户请求RSS Feed显示时,如何避免对数据存储区的查询?即如何缓存?

1 个答案:

答案 0 :(得分:2)

您可以使用memcache避免每次都访问数据存储区。您可能知道查询未在NDB中缓存。

https://developers.google.com/appengine/docs/python/memcache/usingmemcache

def get_data():
  data = memcache.get('key')
  if data is not None:
      return data
  else:
      data = self.query_for_data()
      memcache.add('key', data, 60)
      return data

换句话说,尝试从memcache获取数据,如果失败则从数据存储区获取数据,然后将其添加到memcache进行下一轮。

上面的示例使用了60秒的超时(.add调用中的值为60)只要将该参数保留,只要memcache允许,数据就会保持不变。

同样来自一个类似的问题:NDB Caching When Using Projected Queries

  

key.get()将从缓存中缓存和检索,但不会从缓存中检索query.get()。   https://developers.google.com/appengine/docs/python/ndb/cache

     

来自文档:查询不会在任何缓存中查找值。但是,如果缓存策略这样说,则查询结果将写回到上下文缓存中(但永远不会发送到Memcache)。

因此,如果按键获取,您将自动从NDB缓存中获取,如果可用,但我个人并未使用它。

因此,在渲染之前构建您的RSS内容,或者将其保存到memcache。然后,当您更新其创建的内容时,只需使缓存版本无效(请参阅文档),以便下一个请求将从数据存储中获取,然后您可以将其放回缓存中。