memcached是很强大的工具,因为它可以支持分布式的共享内存缓存,大站都用它,对小站点来说,只要出得起内存,这也是好东西;首页所需要的内存缓冲区大小估计不会超过10K,更何况我现在也是内存土豪了,还在乎这个?
安装:ubuntu下还是方便啊
apt-get install memcached
apt-get install python-memcached
配置运行:因为是单机没啥好配的,改改内存和端口就行了
vi /etc/memcached.conf
/etc/init.d/memcached restart
在python的网页应用中使用之
import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
memcache其实就是一个map结构,最常使用的就是两个函数了:
- 第一个就是set(key,value,timeout) ,这个很简单就是把key映射到value,timeout指的是什么时候这个映射失效
- 第二个就是get(key) 函数,返回key所指向的value
于是对一个正常的sql查询可以这么干
sql = 'select count(*) from verycd'
c = sqlite3.connect('verycd.db').cursor()
#原来的处理方式
c.execute(sql)
count = c.fetchone()[0]
#现在的处理方式
from hashlib import md5
key=md5(sql)
count = mc.get(key)
if not count:
c.execute(sql)
count = c.fetchone()[0]
mc.set(key,count,60*5) #存5分钟
其中md5是为了让key分布更均匀,其他代码很直观我就不解释了。
key = None
if custom_key:
custom_key = str(custom_key).encode("utf-8")
if isinstance(base_key, ModelBase):
base_key = "%s%s%s" % (base_key.__module__, split_char, base_key.__name__)
elif isinstance(base_key, Model):
base_key = base_key.__class__
base_key = "%s%s%s" % (base_key.__module__, split_char, base_key.__name__)
else:
base_key = str(base_key)
to_md5 = (len(custom_key) + len(base_key)) > 250
if not to_md5:
for char in custom_key:
if ord(char) < 33 or ord(char) == 127:
to_md5 = True
break
if to_md5:
m = hashlib.md5()
m.update(custom_key)
custom_key = m.hexdigest()
key = ("%s%s%s" % (base_key, split_char, custom_key)).lower()
源文:http://simple-is-better.com/news/351