Python中用memcached来减少数据库查询次数的教程


当前第2页 返回上一页


终于轮到memcached了,既然打算缓存,用文件做缓存的话还是有磁盘I/O,不如直接缓存到内存里面,内存I/O可就快多了。于是memcached顾名思义就是这么个东东。

memcached是很强大的工具,因为它可以支持分布式的共享内存缓存,大站都用它,对小站点来说,只要出得起内存,这也是好东西;首页所需要的内存缓冲区大小估计不会超过10K,更何况我现在也是内存土豪了,还在乎这个?

配置运行:因为是单机没啥好配的,改改内存和端口就行了
 

vi /etc/memcached.conf
 
/etc/init.d/memcached restart

在python的网页应用中使用之
 

import memcache
 
mc = memcache.Client(['127.0.0.1:11211'], debug=0)

memcache其实就是一个map结构,最常使用的就是两个函数了:

  1.     第一个就是set(key,value,timeout),这个很简单就是把key映射到value,timeout指的是什么时候这个映射失效
  2.     第二个就是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分布更均匀,其他代码很直观我就不解释了。


优化过语句1和语句2后,首页的平均生成时间已经降低到0.02秒,和discuz一个量级了;再经过语句3的优化,最终结果是首页生成时间降低到了 0.006秒左右,经过memcached寥寥几行代码的优化,性能提高了3300%。终于可以挺直腰板来看Discuz了)

更多相关Discuz论坛的内容来自木庄网络博客


标签:Discuz论坛

返回前面的内容

相关阅读 >>

discuz 修改创始人密码、管理员登录密码的方法

最常用的php正则表达式收集整理

communityserver又称cs论坛的相关学习资料

discuz的php防止sql注入函数

javascript 浏览器验证代码(来自discuz)

discuz板块横排显示图片的实现方法

php中文分词的简单实现代码分享

discuz登录后总是显示未登录状态费怎么办

discuz提示“密码错误次数过多,请15分钟后重新登陆”问题解决方法

浅谈discuz密码加密的方式

更多相关阅读请进入《Discuz论坛》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...