python 自帶的 記憶體快取

2021-09-25 13:33:20 字數 2240 閱讀 6837

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 來儲存它 被快取的資料會一直保留在快取中,直到因一些快取策略而被刪除 比如快取空間滿了,刪除最舊...