Cache抽象理解及SpEL及常用註解

2021-10-08 16:52:04 字數 2315 閱讀 6154

先從快取中讀取資料,如果命中則直接返回結果,如果沒有再從慢速裝置上讀取實際的資料,之後資料存入快取。

我們常把經常讀不經常寫,且對安全性要求不高的資料存入快取,讓資料離消費者更近。

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 如果父類的建構函式是私有的,那麼子類不能繼承此父類。如果抽象類的建構函...