tornado缓存技术
jopen
11年前
模板缓存,是一定要开的
页面缓存,如果可以静态化,也会静态化
对于部分可以缓存的页面,用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})上面的还要考虑
-
区分登陆用户和非登录用户,登陆用户不需要cache
-
区分get和post等,如果post要清空cache
-
如果是后台管理页面不需要缓存
-
如果写成装饰器来装饰要cache的函数,类等就更好了 eg.
@cache(backend="redis", timeout=180, methods=["GET", ], cache_user="unlogined")