關於MySQL中savepoint語句應用時所湧現的毛病。本站提示廣大學習愛好者:(關於MySQL中savepoint語句應用時所湧現的毛病)文章只能為提供參考,不一定能成為您想要的結果。以下是關於MySQL中savepoint語句應用時所湧現的毛病正文
緣由
Blog是一個更新其實不很頻仍的一套體系,然則每次刷新頁面都要更新數據庫反而很糟蹋資本,添加靜態頁面熟成是一個處理方法,同時緩存是一個更好的主張,可以聯合Memcached添加大批的代碼停止緩存,並且免除去了每次更新文章都要從新生成靜態頁面,特殊當頁面特殊多時.
完成
重要經由過程頁面的uri停止緩存,聯合tornado.web.RequestHandler的prepare和on_finish辦法函數, prepare 重要是要求前履行,on_finish()是要求停止之前履行.在襯著模板時緩存頁面內容,然後在要求前檢測能否有緩存,假如有直接輸入緩存,停止要求,在POST提交以後清空一切緩存,從新生成緩存,從而包管內容及時性.因為登錄用戶和通俗用戶的頁面不雷同,所以不緩存登錄用戶頁面(代碼中沒有表現,請自行完成).重要python代碼(省略了模板襯著的代碼):
#!/usr/bin/env python # -*- coding:utf-8 -*- # # Author : cold # E-mail : [email protected] # Date : 13/01/14 09:57:31 # Desc : # import config import pylibmc from tornado.web import RequestHandler #### 省略Cache類界說 ##### class Memcached(object): _mc = pylibmc.client.Client(config.CACHE_HOST, binary = True) def __enter__(self): if config.CACHED: return Memcached else: return Cache() def __exit__(self, exc_type, exc_val, exc_tb): pass @classmethod def get_cache(cls): return cls._mc @classmethod def get(cls, key, default = None): r = cls._mc.get(key) if not r: r = default return r @classmethod def set(cls, key, value, timeout = 0): timeout = timeout if timeout else config.CACHE_TIMEOUT return cls._mc.set(key, value, timeout) @classmethod def delete(cls, key): return cls._mc.delete(key) @classmethod def flush(cls): return cls._mc.flush_all() def __getattr__(self, key): return Memcached.get(key) def __setattr__(self, key, value): return Memcached.set(key, value) class BaseHandler(RequestHandler): """ 繼續tornado要求基類,重寫 prepare和on_finish辦法 """ cache = Memcached def render(self, template_path, *args, **kwargs): """ 襯著模板 """ # 省略襯著模板代碼 content = '' # 襯著模板後的內容 if self.request.method == "GET" and CACHED and \ not self.request.path.startswith("/admin"): self.cache.set(self.request.uri, content) # 將襯著後的內容緩存起來 self.write(content) def prepare(self): super(BaseHandler, self).prepare() # 假如要求是GET辦法,並且不是要求後台 if self.request.method == "GET" and CACHED and \ not self.request.path.startswith("/admin"): # 測驗考試獲得以後頁面的緩存 cache = self.cache.get(self.request.uri) # 獲得緩存則輸入頁面,停止要求 if cache: return self.finish(cache) def on_finish(self): """ 重寫停止要求前的辦法函數 """ if self.request.method == "POST": # 假如碰到POST提交則清空緩存 self.cache.flush()
緩存體系在redis和Memcached選擇了良久,由於只是純真的緩存頁面所以最初選擇了memcached,應用pylibmc python庫.
測試
應用webbench 網站壓力測試比較了緩存前後的成果: 應用緩存前
$ webbench -c 500 -t 30 http://www.linuxzen.com/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://www.linuxzen.com/ 500 clients, running 30 sec. Speed=54 pages/min, 38160 bytes/sec. Requests: 27 susceed, 0 failed.
應用緩存後:
$ webbench -c 500 -t 30 http://www.linuxzen.com/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://www.linuxzen.com/ 500 clients, running 30 sec. Speed=256 pages/min, 238544 bytes/sec. Requests: 128 susceed, 0 failed.
顯著快了許多...