tornado缓存技术

模板缓存,是一定要开的

页面缓存,如果可以静态化,也会静态化

对于部分可以缓存的页面,用uimodule加上缓存

结果集一般是数据驱动删除缓存...

能用memcache就不用redis...


相关链接 

memcached缓存tornado页面 http://www.linuxzen.com/vlogshi-yong-tornadokuang-jia-jie-he-memcachedhuan-cun-ye-mian.html

使用mongo http://tornadogists.org/2927255/

class CacheBaseHandler(tornado.web.RequestHandler):
 
    def prepare(self):
        # 这里判断一下是否是GET请求,是否是非登陆用户,才做以下处理
        cached = self.application.db.cache.find_one({"slug": self.request.path})
        if cached is not None:
            self.write(cached["content"])
            self.finish()
 
    def render_string(self, template_name, **kwargs):
        html_generated = \
            super(CacheBaseHandler, self).render_string(template_name, **kwargs)
        self.application.db.cache.update({"slug": self.request.path},
            {"$set": {"content": html_generated}},
            upsert=True)

        return html_generated

    def on_finish(self):
        """ 重写结束请求前的方法函数 """
        if self.request.method == "POST":
            # 如果遇到POST提交则清空缓存
            self.application.db.cache.remove({"slug": self.request.path})

上面的还要考虑

  1. 区分登陆用户和非登录用户,登陆用户不需要cache

  2. 区分get和post等,如果post要清空cache

  3. 如果是后台管理页面不需要缓存

  4. 如果写成装饰器来装饰要cache的函数,类等就更好了 eg.

    @cache(backend="redis", timeout=180, methods=["GET", ], cache_user="unlogined")


你可能感兴趣的:(tornado)