flask-cache源码分析

function_name方法分析

def function_namespace(f, args=None):
"""
Attempts to returns unique namespace for function
"""

返回带namespace的fname, 如果是实例方法, 还会返和这个对象有关系的带namespace的一个值

例如下面的类(demo/views.py):

class User(object):

    def __init__(self, id):
        self.id = id

    def __repr__(self):
        return '{0}({1})'.format(self.__class__.__name__, self.id)

    @classmethod
    @cache.memoize(timeout=3)
    def get(cls, id):
        r = id + random.random()
        return 'User - {0}'.format(r)

    @cache.memoize(timeout=3)
    def get_r(self, base):
        return 'base - '.format(base + random.random())

执行:

u = User(2)
u.get_r(2)

结果如下:

fname - demo.views.User.get_r
instance_fname - demo.views.User.get_r.User(2)

执行:

User.get(2)

结果如下:

fname - demo.views.User.get
instance_fname - None

继续分析

def _memoize_version(self, f, args=None,
                     reset=False, delete=False, timeout=None):
    """
    Updates the hash version associated with a memoized function or method.
    """

返回一个带namespace的fname, 还有一个存在缓存中的version_data

生成key的过程就是

对func和参数生成一个唯一的值, 然后加上version_data, 就是缓存的key

对这个函数的所有缓存都失效:

if not args and not kwargs:
    self._memoize_version(f, reset=True)
flask-cache.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,751评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 把当前目录作为Root Document只需要这条命令即可:php -S localhost:3300 也可以指定...
    绚烂的时光阅读 756评论 0 1
  • 我的父亲是一个,百折不挠,不畏艰险,能吃苦认定的事情,坚持到底的一个人。 他生于五十年代,早年在家务农日子特别的艰...
    张立夏物华天宝人杰地灵阅读 245评论 0 1