我应该使用记忆快取吗?
|
我的代码从Google App Engine生成了一个zip文件,可在浏览器中加载,即10 KB <大小<1000 KB,我想知道我是否可以在此处使用内存缓存,或者文件太大还是已经缓存。在先生成实际文件时,我已经使用了memcache并设置了缓存控件。
class KMZHandler(webapp.RequestHandler):
def add_file(self, zip_file, url, file_name):
\"\"\"Fetch url, and add content as file_name to the zip file.\"\"\"
result = urlfetch.fetch(url)
if not result.content:
return
zip_file.writestr(file_name, result.content)
def get(self):
\"\"\"Attempt to create a zip file.\"\"\"
# you could set \'count\' like this:
# count = int(self.request.get(\'count\', 1000))
zipstream = StringIO.StringIO()
zip_file = zipfile.ZipFile(zipstream, \"w\")
# repeat this for every URL that should be added to the zipfile
url = \'http://www.koolbusiness.com/list.kml\'
self.add_file(zip_file, url, \"list.kml\")
# we have finished with the zip so package it up and write the directory
zip_file.close()
# set the headers...
self.response.headers[\"Cache-Control\"] = \"public,max-age=%s\" % 86400
self.response.headers[\'Content-Type\'] =\'application/zip\'
self.response.headers[\'Content-Disposition\'] = \'attachment;filename=\"list.kmz\"\'
# create and return the output stream
zipstream.seek(0)
self.response.out.write(zipstream.read())
zipstream.close()
这是使用内存缓存并创建实际文件的部分:
class KMLHandler(webapp.RequestHandler):
def get(self):
self.response.headers[\"Cache-Control\"] = \"public,max-age=%s\" % 86400
start=datetime.datetime.now()-timedelta(days=20)
count = int(self.request.get(\'count\')) if not self.request.get(\'count\')==\'\' else 1000
from google.appengine.api import memcache
memcache_key = \"ads\"
data = memcache.get(memcache_key)
if data is None:
a= Ad.all().filter(\"modified >\", start).filter(\"url IN\", [\'www.koolbusiness.com\']).filter(\"published =\", True).order(\"-modified\").fetch(count)
memcache.set(\"ads\", a)
else:
a = data
dispatch=\'templates/kml.html\'
template_values = {\'a\': a , \'request\':self.request,}
path = os.path.join(os.path.dirname(__file__), dispatch)
output = template.render(path, template_values)
self.response.headers[\'Content-Type\'] = \'application/vnd.google-earth.kml+xml\'
self.response.headers[\'Content-Length\'] = len(output)
self.response.out.write(output)
感谢您的回答
没有找到相关结果
已邀请:
1 个回复
犀耽澄协吻
或
的不同值。如果这并不重要,您也可以考虑直接处理KML(或KMZ)文件;如果重要的话,您需要修复缓存策略。