python標準庫中的functools模組,提供了functools.lru_cache,基於記憶體的快取。
基於記憶體快取
lru_cache
from functools import lru_cache
@lru_cache(maxsize=1)
defsum2
(a,b)
:print
(f"計算+ ... "
)return a+b
print
(sum2(2,
3))print
(sum2(2,
3))print
(sum2(4,
7))print
(sum2(4,
7))print
(sum2(2,
3))print
(sum2(4,
7))
maxsize=
1,表示可以快取的元素的個數。
改變maxsize的值為2,再切換為1,執行程式觀察輸出結果.
sum2.cache_info(
)#檢視快取效能
sum2.cache_clear(
)#清除快取
基於磁碟的快取
joblib
"""
教程 安裝 pip install joblib
"""from joblib import memory
memory = memory(location=
"./cachedir"
)@memory.cache
defsum2
(a,b)
:print
(f"計算+ ... "
)return a+b
print
(sum2(2,
3))print
(sum2(2,
3))print
(sum2(4,
7))print
(sum2(4,
7))print
(sum2(2,
3))print
(sum2(4,
7))
兩個一起用,記憶體+硬碟快取
二級快取 雙重快取
import time
import random
from functools import lru_cache
from joblib import memory
memory = memory(location=
"cachedir"
)@lru_cache(maxsize=5)
@memory.cache
defsum2
(arg)
: time.sleep(1)
list1 =[0
,1,2
] a = random.choice(list1)
arg =1/a
return arg
if __name__ ==
"__main__"
:while
true
:for i in
["a1"
,"b2"
,"e3"
,'d4'
,'e5']:
arg = i
t0 = time.time(
)try
: res = sum2(arg)
print
("+++++++++++++++++++++++++++++++++++"
)print
(i,res,
"sum2 cost"
,time.time(
)-t0)
print
("+++++++++++++++++++++++++++++++++++"
)except
:print
("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
) input_str =
input
("繼續 or 結束"
)if input_str ==
'q':
break
asp自帶的記憶體快取 application
函式getcache,會自動建立需要的快取。複製 如下 function getcache funsname,isreset,isarr,timeinfo funsname 需要快取的內容,這裡要輸入乙個function名 isreset 是否更新 值 0 根據時間或判斷快取為空時自動更新 主動更新...
spring自帶快取機制
cacheable支援如下引數 負責將方法的返回值加入到快取中 value 快取位置名稱,不能為空.key 快取的key,預設為空,支援springel表示式.condition 觸發條件,只有滿足條件的情況下才會加入快取,預設為空,表示全部加入快取,支援springel表示式.cachevict支...
Yii的自帶快取的使用
yii的自帶快取都繼承ccache 類,在使用上基本沒有區別 快取基礎類 ccache 提供了兩個最常用的方法 set 和 get 要在快取中儲存變數 value,我們選擇乙個唯一 id 並呼叫 set 來儲存它 被快取的資料會一直保留在快取中,直到因一些快取策略而被刪除 比如快取空間滿了,刪除最舊...