程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL中savepoint語句應用時所湧現的毛病

關於MySQL中savepoint語句應用時所湧現的毛病

編輯:MySQL綜合教程

關於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.

顯著快了許多...

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved