flask-cache源码简要分析

flask-cache源码文件包含下面三个文件:
  1. __init__.py:flask-cache主要功能,提供了对用户使用的各种函数;
  2. backends.py:对werkzeug.contrib.cache进行一些封装以及扩展,为__init__.py提供多种缓存类型;
  3. jinja2ext.py:jinjia2的扩展,用于缓存jinjia2模版;

jinja2ext.py

首先我们来简要剖析下flask-cache扩展jinjia2,用于缓存jinjia2模版片段。该文件提供一个类:CacheExtension,该类的父类是jinjia2.ext.Extension,在父类的基础上对parse(self, parser)进行了扩展(修改)。具体的代码需要对jinjia2有些了解,尤其是jinjia2.ext.Extension,这里不啰嗦。

backends.py

这里包含了flask-cache对外提供的内置的缓存类型:NullCache、SimpleCache、MemcachedCache 、GAEMemcachedCache、RedisCache 、FileSystemCache、SASLMemcachedCache。

  • NullCache是对werkzeug.contrib.cache中的NullCache进行简单封装;
  • SimpleCache是对werkzeug.contrib.cache中的SimpleCache进行简单封装;
  • MemcachedCache是对werkzeug.contrib.cache中的MemcachedCache进行简单封装;
  • GAEMemcachedCache是对werkzeug.contrib.cache中的GAEMemcachedCache进行简单封装;
  • RedisCache是对werkzeug.contrib.cache中的RedisCache进行简单封装;
  • FileSystemCache是对werkzeug.contrib.cache中的FileSystemCache进行简单封装;
  • SASLMemcachedCache是flask-cache扩展了werkzeug.contrib.cache中的基础类MemcachedCache,实现了一个值跨多个不同的key存储;

__init__.py

文件里面只包含一个类:Cache。该类最重要的两个函数:cached和memoize,都能作为装饰器使用。cached主要用于缓存视图函数或者非视图函数,而memoize是Memoization <http://en.wikipedia.org/wiki/Memoization>的一种体现,主要用于缓存函数结果,这样多次调用的函数,只需要计算一次。