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