2012-10-01 111 views
0

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

回答

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 

所以,换句话说,试图从内存缓存让您的数据,如果失败从数据库中获取它,然后将其添加到内存缓存为下一次轮。

上面的示例使用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中。然后,当您更新其创建的内容时,只需使缓存版本无效(请参阅文档),以便下一个请求将从数据存储中获取该内容,然后将其放回缓存中。

+0

谢谢! '构建你的RSS内容,并且在渲染之前,将它保存到memcache中是关键! –