tornado缓存技术

jopen 10年前

模板缓存,是一定要开的

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

对于部分可以缓存的页面,用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")