flask-cache源码文件包含下面三个文件:
-
__init__.py:flask-cache主要功能,提供了对用户使用的各种函数;
-
backends.py:对werkzeug.contrib.cache进行一些封装以及扩展,为__init__.py提供多种缓存类型;
-
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>的一种体现,主要用于缓存函数结果,这样多次调用的函数,只需要计算一次。