spring Cache註解詳解

來源:互聯網
上載者:User

標籤:book   ace   多個   load   ash   apple   運算式   資料庫   tostring   

@CacheConfig:主要用於配置該類中會用到的一些共用的緩衝配置。在這裡@CacheConfig(cacheNames = "users"):配置了該Data Access Objects中返回的內容將儲存於名為users的緩衝對象中,我們也可以不使用該註解,直接通過@Cacheable自己配置緩衝集的名字來定義。

 

@Cacheable:配置了findByName函數的傳回值將被加入緩衝。同時在查詢時,會先從緩衝中擷取,若不存在才再發起對資料庫的訪問。該註解主要有下面幾個參數:

@Cacheable(cacheNames="books", key="#isbn")public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)@Cacheable(cacheNames="books", key="#isbn.rawNumber")public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)@Cacheable(cacheNames="books", key="T(someType).hash(#isbn)")public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)@Cacheable(cacheNames="books", key="#map[‘bookid‘].toString()")public Book findBook(Map<String, Object> map)

緩衝的同步 sync: 
在多線程環境下,某些操作可能使用相同參數同步調用。預設情況下,緩衝不鎖定任何資源,可能導致多次計算,而違反了緩衝的目的。對於這些特定的情況,屬性 sync 可以指示底層將緩衝鎖住,使只有一個線程可以進入計算,而其他線程堵塞,直到返回結果更新到緩衝中。 
例:

@Cacheable(cacheNames="foos", sync="true")public Foo executeExpensiveOperation(String id) {...}

value、cacheNames:兩個等同的參數(cacheNames為Spring 4新增,作為value的別名),用於指定緩衝儲存的集合名。由於Spring 4中新增了@CacheConfig,因此在Spring 3中原本必須有的value屬性,也成為非必需項了

key:緩衝Object Storage Service在Map集合中的key值,非必需,預設按照函數的所有參數組合作為key值,若自己配置需使用SpEL運算式,比如:@Cacheable(key = "#p0"):使用函數第一個參數作為緩衝的key值,更多關於SpEL運算式的詳細內容可參考官方文檔

condition:緩衝對象的條件,非必需,也需使用SpEL運算式,只有滿足運算式條件的內容才會被緩衝,比如:@Cacheable(key = "#p0", condition = "#p0.length() < 3"),表示只有當第一個參數的長度小於3的時候才會被緩衝,若做此配置上面的AAA使用者就不會被緩衝,讀者可自行實驗嘗試。

@Cacheable(cacheNames="book", condition="#name.length < 32")public Book findBook(String name)

unless:另外一個緩衝條件參數,非必需,需使用SpEL運算式。它不同於condition參數的地方在於它的判斷時機,該條件是在函數被調用之後才做判斷的,所以它可以通過對result進行判斷。

@Cacheable(cacheNames="book", condition="#name.length < 32", unless="#result.name.length > 5"")public Book findBook(String name)

keyGenerator:用於指定key產生器,非必需。若需要指定一個自訂的key產生器,我們需要去實現org.springframework.cache.interceptor.KeyGenerator介面,並使用該參數來指定。需要注意的是:該參數與key是互斥的

cacheManager:用於指定使用哪個緩衝管理器,非必需。只有當有多個時才需要使用

cacheResolver:用於指定使用那個緩衝解析器,非必需。需通過org.springframework.cache.interceptor.CacheResolver介面來實現自己的緩衝解析器,並用該參數指定。

除了這裡用到的兩個註解之外,還有下面幾個核心註解:

 

@CachePut:配置於函數上,能夠根據參數定義條件來進行緩衝,它與@Cacheable不同的是,它每次都會真是調用函數,所以主要用於資料新增和修改操作上。它的參數與@Cacheable類似,具體功能可參考上面對@Cacheable參數的解析

@CachePut(cacheNames="book", key="#isbn")public Book updateBook(ISBN isbn, BookDescriptor descriptor)

@CacheEvict:配置於函數上,通常用在刪除方法上,用來從緩衝中移除相應資料。除了同@Cacheable一樣的參數之外,它還有下面兩個參數:

allEntries:非必需,預設為false。當為true時,會移除所有資料

@CacheEvict(cacheNames="books", allEntries=true)public void loadBooks(InputStream batch)

beforeInvocation:非必需,預設為false,會在調用方法之後移除資料。當為true時,會在調用方法之前移除資料。

@CacheEvict(cacheNames="books", beforeInvocation=true)public void loadBooks(InputStream batch)

spring Cache註解詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.