javascript
SpringBoot 缓存之 @Cacheable 详细介绍
一、簡(jiǎn)介
1、緩存介紹
Spring 從 3.1 開始就引入了對(duì) Cache 的支持。定義了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口來統(tǒng)一不同的緩存技術(shù)。并支持使用 JCache(JSR-107)注解簡(jiǎn)化我們的開發(fā)。
其使用方法和原理都類似于 Spring 對(duì)事務(wù)管理的支持。Spring Cache 是作用在方法上的,其核心思想是,當(dāng)我們?cè)谡{(diào)用一個(gè)緩存方法時(shí)會(huì)把該方法參數(shù)和返回結(jié)果作為一個(gè)鍵值對(duì)存在緩存中。
2、Cache 和 CacheManager 接口說明
-
Cache 接口包含緩存的各種操作集合,你操作緩存就是通過這個(gè)接口來操作的。
-
Cache 接口下 Spring 提供了各種 xxxCache 的實(shí)現(xiàn),比如:RedisCache、EhCache、ConcurrentMapCache
-
CacheManager 定義了創(chuàng)建、配置、獲取、管理和控制多個(gè)唯一命名的 Cache。這些 Cache 存在于 CacheManager 的上下文中。
小結(jié):
每次調(diào)用需要緩存功能的方法時(shí),Spring 會(huì)檢查指定參數(shù)的指定目標(biāo)方法是否已經(jīng)被調(diào)用過,如果有就直接從緩存中獲取方法調(diào)用后的結(jié)果,如果沒有就調(diào)用方法并緩存結(jié)果后返回給用戶。下次調(diào)用直接從緩存中獲取。
二、@Cacheable 注解使用詳細(xì)介紹
1、緩存使用步驟
@Cacheable 這個(gè)注解,用它就是為了使用緩存的。所以我們可以先說一下緩存的使用步驟:
1、開啟基于注解的緩存,使用 @EnableCaching 標(biāo)識(shí)在 SpringBoot 的主啟動(dòng)類上。
2、標(biāo)注緩存注解即可
① 第一步:開啟基于注解的緩存,使用 @EnableCaching 標(biāo)注在 springboot 主啟動(dòng)類上
② 第二步:標(biāo)注緩存注解
注:這里使用 @Cacheable 注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法。
2、常用屬性說明
下面介紹一下 @Cacheable 這個(gè)注解常用的幾個(gè)屬性:
-
cacheNames/value :用來指定緩存組件的名字
-
key :緩存數(shù)據(jù)時(shí)使用的 key,可以用它來指定。默認(rèn)是使用方法參數(shù)的值。(這個(gè) key 你可以使用 spEL 表達(dá)式來編寫)
-
keyGenerator :key 的生成器。 key 和 keyGenerator 二選一使用
-
cacheManager :可以用來指定緩存管理器。從哪個(gè)緩存管理器里面獲取緩存。
-
condition :可以用來指定符合條件的情況下才緩存
-
unless :否定緩存。當(dāng) unless 指定的條件為 true ,方法的返回值就不會(huì)被緩存。當(dāng)然你也可以獲取到結(jié)果進(jìn)行判斷。(通過 #result 獲取方法結(jié)果)
-
sync :是否使用異步模式。
① cacheNames
用來指定緩存組件的名字,將方法的返回結(jié)果放在哪個(gè)緩存中,可以是數(shù)組的方式,支持指定多個(gè)緩存。
② key
緩存數(shù)據(jù)時(shí)使用的 key。默認(rèn)使用的是方法參數(shù)的值??梢允褂?spEL 表達(dá)式去編寫。
③ keyGenerator
key 的生成器,可以自己指定 key 的生成器,通過這個(gè)生成器來生成 key。
這樣放入緩存中的 key 的生成規(guī)則就按照你自定義的 keyGenerator 來生成。不過需要注意的是:
@Cacheable 的屬性,key 和 keyGenerator 使用的時(shí)候,一般二選一。
④ condition
符合條件的情況下才緩存。方法返回的數(shù)據(jù)要不要緩存,可以做一個(gè)動(dòng)態(tài)判斷。
⑤ unless
否定緩存。當(dāng) unless 指定的條件為 true ,方法的返回值就不會(huì)被緩存。
⑥ sync
是否使用異步模式。默認(rèn)是方法執(zhí)行完,以同步的方式將方法返回的結(jié)果存在緩存中。
3、spEL 編寫 key
前面說過,緩存的 key 支持使用 spEL 表達(dá)式去編寫,下面總結(jié)一下使用 spEL 去編寫 key 可以用的一些元數(shù)據(jù):
總結(jié)
以上是生活随笔為你收集整理的SpringBoot 缓存之 @Cacheable 详细介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试官:给我说一下 Spring MVC
- 下一篇: swagger2 注解说明 ( @Api