「看源碼」python flask 緩存庫 flask-caching

代碼地址:

https://github.com/sh4nks/flask-caching

作用:

在flask內方便使用緩存,默認做了一些配置,對象和緩存內數據的轉換,多種cache兼容,緩存裝飾器 等功能

1.使用方法:

初始化的時候生成cache實例會存儲在:flask_app.extensions[『cache』][self]

其中self,是為了支持多個cache實例同時存在

2.裝飾器的代碼


判斷是否要用緩存

關聯參數: unless

這個參數是傳遞一個方法,返回Ture 或者 False , 判斷是否跳過緩存


生成KEY 3種方式:

1.對接口的輸入參數加上request.path ,進行md5處理

2.將生成KEY的規則寫一個方法傳入裝飾器

3.傳入帶有 『%s』的key_prefix,key會自動加上URL路徑或者參數


判斷是否強制更新

將強制更新的規則作為方法傳入,返回True就強制更新


更新緩存

value進行pickle處理

pickle引用:


redis cache 的一些方法

同時還支持

SimpleCache(BaseCache) 直接存dict

MemcachedCache(BaseCache)

RedisCache(BaseCache)

FileSystemCache(BaseCache) 存本地文件,一個key,一個文件(文件內有兩個信息,timeout+pickle_value)

UWSGICache(BaseCache)

清除的時候(可能會清空整個空間)

針對python方法的裝飾器memoize

@memoize

整體流程和 @cache 一樣,只是生成key的方式不一樣

生成key的方法

對象的名字+類名+方法名+參數 一起生成(<cc object at 0x10b44e1d0>+one_class+one_func+arg1+arg2+arg3)

1.class name 和:func name

獲取當前方法的類的名字 repr(func.__self__) 字符串 類似這樣:<cc object at 0x10b44e1d0>

獲取方法的完整的名字(func.__qualname__) == class.__name__ + func.__name__

2.對輸入參數的處理:

參數有 args 和 kwargs ,這裡先獲取到方法的所有參數(inspect.signature(func)),然後將kwargs也轉成 args ,然後轉成tuple

最後將上面的 方法的名字 + 加上 參數的值, 進行hash , 成為唯一的KEY

說明:

使用裝飾器的方法的輸入參數最好不傳對象

以上簡化了一些邏輯

慎用清空緩存的方法,或單獨用一個緩存空間

聲明:文章觀點僅代表作者本人,PTTZH僅提供信息發布平台存儲空間服務。
喔!快樂的時光竟然這麼快就過⋯