Web.py增加Memcache支持

为了降低数据库和服务器的压力,采用Memcache来缓存频繁访问的内容或IO延迟较高的内容是一个简单高效的办法,这里简单介绍下我在web.py中增加memcache的过程,首先需要一个用于处理缓存的过滤器,一个带参数的过滤器。需要注意的是,对于web.py的模板结果需要通过str转换成字符串存储,以防序列化报错

def using_cache(sectionname, ttl=config.Cache_time_page):
    def method_wraper(method):
        def handle_args(*args, **kwargs):
            if mc is None:
                result = method(*args, **kwargs)
                return result
            else:
                if len(args) > 1:
                    cachename = "%s_%s" % (sectionname, '&'.join(args[1:]))
                else:
                    cachename = sectionname
                result = mc.get(cachename)
                if not result:
                    result = method(*args, **kwargs)
                    if isinstance(result, web.template.TemplateResult):
                        result = str(result)
                    mc.set(cachename, result, ttl)
                return result
        return handle_args
    return method_wraper

在需要缓存的请求方法前打上@using_cache的过滤器轻松搞定,这个缓存类不但支持请求的缓存,也支持一般方法的缓存,注意序列化类型就可以了

class Article:

    @using_cache('Article')
    def GET(self):
        ......
        ......
        return something


  • 站长:Dreamheart_Zhao
  • 职业:专职程序猿
  • 技能:
    • Python
    • C#
    • .NetMVC
    • C++
    • Java
  • Email: addonce@163.com