Google App Engine的模块和Handler Script缓存
2009 2 20 04:45 PM 2044次查看
分类:Google App Engine 标签:Google App Engine, Python
这里有篇《Google App Engine 对 module 的缓存时间》,你可以看到模块是怎么被缓存的。
要让Handler Script被缓存,需要为这个Handler Script定义一个无参的main函数,并且请求必须要调用这个main函数。(一般来说,我们的应用程序都是先在main函数里进行的,所以这点基本符合。)
这里我照抄个缓存Handler Script的例子:
counter = 0
def main():
global counter
counter += 1
print "Content-Type: text/plain"
print ""
print "My number: " + str(counter)
if __name__ == "__main__":
main()
这样每访问一次,counter就会+1。注意缓存会不定期清空,而且在你执行appcfg.py update来更新时,也会清空。所以不应将其用于需要永久存放的数据。
要注意的是,不要把和某一用户相关的数据放在这种缓存里,不然会被多个用户共享。
缓存的一些好处:
- 正则表达式会被解析和编译后,放在缓存中。这样再次访问时,就无需重新解析了。
- GqlQuery对象也可以缓存。由于构建GqlQuery对象是个很费时的操作,如果用bind方法重复利用被缓存的GqlQuery对象,就可以提高效率。
- 存放配置数据。如果配置数据是从文件中读取的,会造成每次运行都要读取文件。而如果缓存了,则无需再次读取。
一个不错的办法是,把APP缓存、Memcache和数据库做成三层存储系统。
当APP缓存清空时(判断是否为缺省值,或一个很小的值;建议将初始值设成一个不可能的值,比如次数为-100),就从Memcache中取,如果Memcache中也取不到,就从数据库取。这样不但节省时间,还少了很多次的API调用。
你可以在《在GAE中使用记录系统》这篇帖中看到实现的代码片段。
0条评论 你不来一发么↓