代碼地址:
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
說明:
使用裝飾器的方法的輸入參數最好不傳對象
以上簡化了一些邏輯
慎用清空緩存的方法,或單獨用一個緩存空間