跬步 On Coding

Memcached 优化 MySQL 查询

简介

跬步上线后,SAE后台显示云豆的消耗http与MySQL查询各占一半,正好SAE还支持Memcached,本着不用白不用的原则,为db.py加上了Memcached的缓存支持。

网站在并发不大的情况下,MySQL查询时间还感受不出来,但是如果并发大的化,MySQL会显著的降低响应速度,所以Memcached应运而生。

Memcached是一个分布式的内存key-value存储系统,由于数据保存在内存中所以查询速度非常快,一般作为其它数据的中间缓存层来使用。

对于SQL查询先以SQL语句为key查询Memcached,如果查到直接返回,如果没有再去查询MySQL,并把结果缓存到Memcached,下次再次查询时速度显著提升,因为Memcached的数据是保存在内存中的。

Jinja2 模版引擎

参考

API

from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader(templ_dir))

Python Web farmwork

简介

上一节写了WSGI与Cookie相关的内容,为了方便的实现Web App,需要编写一个简单的Web框架,需要实现以下功能:

  1. 处理request;
  2. 生成response header;
  3. 根据request URI找到对应处理的函数,即URL路由;
  4. 定制模版引擎;
  5. 拦截器,在处理函数产生响应前,做预处理,相当于WSGI中middlware的概念,比如处理Cookie等。

HTTP Cookie

什么是Cookie

Cookie用于存储http请求中的用户认证信息,用户在通过登录认证后,服务器在response header中设置Cookie,用户浏览器自动带Cookie访问该网站。

response header 中添加 Set-Cookie信息,cookie是一组key,value值。

Set-Cookie: <name>=<value>[; <name>=<value>]...
            [; expires=<date>][; domain=<domain_name>]
            [; path=<some_path>][; secure][; httponly]

WSGI 理解

参考

WSGI 简介

WSGI是Python webserver与Web App之间的协议。这个协议定义了Web server和App的行为,是的server与app分离,简化了开发。

WSGI server,Gunicorn(python实现),uWSGI(C实现),这些服务器程序都实现了标准的WSGI接口,任意web app都可以使用不同的server。