DAOCLOUD
推荐学习书目
Python Cookbook
Using Google App Engine
推荐下载
Latest Google App Engine SDK
其他兼容技术
AppScale
julia

GAE: 把网站首页整个放memcache里有什么问题吗?

  •  
  •   julia · Dec 20, 2010 · 5767 views
    This topic created in 5625 days ago, the information mentioned may be changed or developed.
    将更新后的整个template都放memcache里。
    6 replies    1970-01-01 08:00:00 +08:00
    billychow
        1
    billychow  
       Dec 20, 2010
    没问题
    没必要
    用 HTTP Header 就行了。
    julia
        2
    julia  
    OP
       Dec 20, 2010
    @billychow HTTP Header?你是说控制浏览器缓存? 我的意思是像生成静态页面那样,不过这个是全放memcache里了。。。
    Los
        3
    Los  
       Dec 20, 2010
    @billychow 有必要,别忘了首次访问此页面的用户:)
    darasion
        4
    darasion  
       Dec 20, 2010
    我也没多少经验,只是说说。

    一下文字中:
    [内容] 就是最终的一大堆html什么的。
    [header] 就是有关浏览器缓存控制和内容类型 的一些 header,,例如'last-modified', 'etag', 'cache-control', 'expires', 'content-type' 等。


    我一开始的想法是:
    用户第一次访问,如果memcache里边有内容和header,就返回memcache中的内容和header;如果没有就去 datastore 里取,取出后的内容和header都放进memcache。

    用户其余的访问,如果memcache里有,对比请求头里边的 if-none-match, last-modified-since 什么的,对上号就直接返回 状态 304,对不上号就跟第一次访问相同。


    后来在实践中,发现 GAE 的 memcache 只能保存pickle 后的 1M 大小(实际内容不到1M),所以一些类似图片什么的几百K的稍大一点的文件就不好都放在 memcache 中了(会抛异常)。于是,当经常有比较大的内容的时候,就不保存内容,直接保存 header 到 memcache 。


    于是可以这样:
    用户第一次访问,直接从datastore里边取出数据生成内容传给浏览器,并将 heade 保存到memcache。

    用户其余的访问,对比 memcache 中保存的 header 和 请求头,如果能对上号,就返回 304 。对不上,就进行第一次访问的过程。
    julia
        5
    julia  
    OP
       Dec 20, 2010
    @darasion 哈哈 你这样结合在一起使用 不错的方法。
    saga
        6
    saga  
       Dec 21, 2010
    My method, show code:

    class Img(PlogRequestHandler):
    def get(self, albumidStr, imgidStr, name):
    self.response.headers['Content-Type'] = 'text/html;charset=utf-8'
    imagecachestring = "ImageA_%s_%s" % (albumidStr, imgidStr)
    data = None

    try:
    data = memcache.get(imagecachestring)
    except:
    data = None

    if data is not None:
    self.response.headers['Content-Type'] = 'text/html;charset=utf-8'
    self.write(data)
    return

    ......

    self.template_values.update({
    ......
    })

    pagecontent = self.render('templates/viewimage.html')
    memcache.set(imagecachestring, pagecontent, 60)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   880 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 20:36 · PVG 04:36 · LAX 13:36 · JFK 16:36
    ♥ Do have faith in what you're doing.