先從快取中讀取資料,如果命中則直接返回結果,如果沒有再從慢速裝置上讀取實際的資料,之後資料存入快取。
我們常把經常讀不經常寫,且對安全性要求不高的資料存入快取,讓資料離消費者更近。
spring3.1起,提供了註解cache的支援,且提供了cache的抽象。
我們的應用中可能會使用到多種cache,於是,spring還提供了快取管理器,用於管理各種快取元件。
介面中規定了兩個需要實現的方法,乙個是getcache(name)
根據name獲取快取,乙個是getcachenames()
獲取該管理器管理的所有快取名。
開啟基於註解的快取,一般在redis的配置類上新增即可。
查詢快取,快取命中,即返回。快取未命中,讀取資料庫,將返回資料存入快取,並返回。一般用於查詢方法。
每次都會執行,並將結果存入指定的快取中,其他方法可以直接從響應的快取中讀取快取資料,而不需要再去查詢資料庫,一般用於新增方法。
會清空指定的快取,一般用於在更新或刪除方法上。
用於組合多個註解,可以看到該註解定義了三大註解的陣列,如果我們需要多個註解標識方法,必要時我們可以通過自定義註解去簡化。
引數名引數解釋
案例value
快取名,指定快取存放的命名空間
@cacheable(value=」mycache」)
key可選,需使用spel標籤自定義快取的key。
@cacheable
(value=」testcache」,key=」#username」)
condition
可選,需使用spel編寫,返回布林值,在方法前後都會判斷
@cacheable
(value=」testcache」,
condition=」#username.length()>2」)
allentries
(@cacheevit)
是否清空所有快取,預設為false,
如果為true,在方法呼叫後清空所有快取
@cachevict
(value=」testcache」,allentries=true)
beforeinvocation
(@cacheevit)
是否在方法執行前就清空,預設為false,
如果為true,在方法還沒執行的時候就清空快取
@cachevict(value=」testcache」,
beforeinvocation=true)
unless
(@cacheevit)
(@cacheevit)
用於否決快取,不同於condition在方法執行之後判斷。
@cacheable
(value=」testcache」,unless=」#result == null」)
名字位置描述示例
methodname
root object
當前被呼叫的方法名
#root.methodname
method
root object
當前被呼叫的方法
#root.method.name
target
root object
當前被呼叫的目標物件
#root.target
targetclass
root object
當前被呼叫的目標物件類
#root.targetclass
args
root object
當前被呼叫的方法的引數列表
#root.args[0]
caches
root object
當前方法呼叫使用的快取列表(如@cacheable(value=)),則有兩個cache
#root.caches[0].name
argument name
evaluation context
方法引數的名字. 可以直接 #引數名 ,也可以使用 #p0或#a0 的形式,0代表引數的索引;
#iban 、 #a0 、 #p0
result
evaluation context
方法執行後的返回值(僅當方法執行之後的判斷有效,如『unless』,』cache put』的表示式 』cache evict』的表示式beforeinvocation=false)
#result
OpenJpa 的 cache 機制及使用
openjpa的cache機制要比其他的orm框架自帶的cache要強大的多,其他的orm框架如hibernate自帶的cache是 session 級別的,如果你想實現跨session的cache就必須整合third party的cache ehcache,oscache 但openjpa的cac...
Cache的原理 設計及實現
cache的原理 設計及實現 前言 雖然cpu主頻的提公升會帶動系統效能的改善,但系統效能的提高不僅僅取決於cpu,還與系統架構 指令結構 資訊在各個部件之間的傳送速度及儲存部件的訪問速度等因素有關,特別是與cpu 記憶體之間的訪問速度有關。若cpu工作速度較高,但記憶體訪問速度相對較低,則造成cp...
抽象類及抽象方法
抽象類及抽象方法 如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這種類被定義為抽象類.含有抽象方法的類為抽象類。抽象類的特徵 1 不能new,例項化物件 2 乙個類只能繼承乙個抽象類 3 抽象類的修飾符不能是private 如果父類的建構函式是私有的,那麼子類不能繼承此父類。如果抽象類的建構函...