關於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 : wh_linux@126.com
# 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.
顯著快了許多...