欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Cache注解@Cacheable的九個(gè)屬性詳解

 更新時(shí)間:2025年05月22日 12:04:58   作者:扛麻袋的少年  
在@Cacheable注解的使用中,共有9個(gè)屬性供我們來(lái)使用,這9個(gè)屬性分別是:value、?cacheNames、?key、?keyGenerator、?cacheManager、?cacheResolver、?condition、?unless、?sync,下面介紹@Cacheable注解屬性使用方法,感興趣的朋友一起看看吧

1.value/cacheNames 屬性

如下圖所示,這兩個(gè)屬性代表的意義相同,根據(jù)@AliasFor注解就能看出來(lái)了。這兩個(gè)屬性都是用來(lái)指定緩存組件的名稱(chēng),即將方法的返回結(jié)果放在哪個(gè)緩存中,屬性定義為數(shù)組,可以指定多個(gè)緩存;

//這兩種配置等價(jià)
@Cacheable(value = "user") //@Cacheable(cacheNames = "user")
User getUser(Integer id);

2.key屬性

可以通過(guò) key 屬性來(lái)指定緩存數(shù)據(jù)所使用的的 key,默認(rèn)使用的是方法調(diào)用傳過(guò)來(lái)的參數(shù)作為 key。最終緩存中存儲(chǔ)的內(nèi)容格式為:Entry<key,value> 形式。

  • 如果請(qǐng)求沒(méi)有參數(shù):key=new SimpleKey();
  • 如果請(qǐng)求有一個(gè)參數(shù):key=參數(shù)的值
  • 如果請(qǐng)求有多個(gè)參數(shù):key=newSimpleKey(params);(你只要知道 key不會(huì)為空就行了)

key值的編寫(xiě),可以使用 SpEL 表達(dá)式的方式來(lái)編寫(xiě);除此之外,我們同樣可以使用 keyGenerator 生成器的方式來(lái)指定 key,我們只需要編寫(xiě)一個(gè) keyGenerator ,將該生成器注冊(cè)到 IOC 容器即可。(keyGenerator的使用,繼續(xù)往下看)

名字位置描述示例
methodNameroot object當(dāng)前被調(diào)用的方法名#root.method.name
methodroot object當(dāng)前被調(diào)用的方法#root.methodName
targetroot object當(dāng)前被調(diào)用的目標(biāo)對(duì)象#root.target
targetClassroot object當(dāng)前被調(diào)用的目標(biāo)對(duì)象類(lèi)#root.targetClass
argsroot object當(dāng)前被調(diào)用的方法的參數(shù)列表#root.args[0]
cachesroot object當(dāng)前方法調(diào)用使用的緩存列表(如@Cacheable(value={“cache1”,“cache2”})),則有兩個(gè)cache#root.caches[0].name
argument nameevaluation context方法參數(shù)的名字. 可以直接 #參數(shù)名 ,也可以使用 #p0或#a0 的形式,0代表參數(shù)的索引;#id、#p0、#a0
resultevaluation context方法執(zhí)行后的返回值(僅當(dāng)方法執(zhí)行之后的判斷有效,如’unless’、'cache put’的表達(dá)式 'cacheevict’的表達(dá)式beforeInvocation=false)#result

使用示例如下:

@Cacheable(value = "user",key = "#root.method.name")
User getUser(Integer id);

3.keyGenerator 屬性

key 的生成器。如果覺(jué)得通過(guò)參數(shù)的方式來(lái)指定比較麻煩,我們可以自己指定 key 的生成器的組件 id。key/keyGenerator屬性:二選一使用。我們可以通過(guò)自定義配置類(lèi)方式,將 keyGenerator 注冊(cè)到 IOC 容器來(lái)使用。

import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.lang.reflect.Method;
import java.util.Arrays;
@Configuration
public class MyCacheConfig {
    @Bean("myKeyGenerator")
    public KeyGenerator keyGenerator(){
        return new KeyGenerator(){
            @Override
            public Object generate(Object target, Method method, Object... params) {
                return method.getName()+ Arrays.asList(params).toString();
            }
        };
    }
    /**
     * 支持 lambda 表達(dá)式編寫(xiě)
     */
    /*@Bean("myKeyGenerator")
    public KeyGenerator keyGenerator(){
        return ( target,  method, params)-> method.getName()+ Arrays.asList(params).toString();
    }*/
}

4.cacheManager 屬性

該屬性,用來(lái)指定緩存管理器。針對(duì)不同的緩存技術(shù),需要實(shí)現(xiàn)不同的 cacheManager,Spring 也為我們定義了如下的一些 cacheManger 實(shí)現(xiàn)()

CacheManger描述
SimpleCacheManager使用簡(jiǎn)單的Collection來(lái)存儲(chǔ)緩存,主要用于測(cè)試
ConcurrentMapCacheManager使用ConcurrentMap作為緩存技術(shù)(默認(rèn))
NoOpCacheManager測(cè)試用
EhCacheCacheManager使用EhCache作為緩存技術(shù),以前在hibernate的時(shí)候經(jīng)常用
GuavaCacheManager使用google guava的GuavaCache作為緩存技術(shù)
HazelcastCacheManager使用Hazelcast作為緩存技術(shù)
JCacheCacheManager使用JCache標(biāo)準(zhǔn)的實(shí)現(xiàn)作為緩存技術(shù),如Apache Commons JCS
RedisCacheManager使用Redis作為緩存技術(shù)

具體使用介紹,可參考:SpringBoot整合Redis實(shí)現(xiàn)數(shù)據(jù)緩存

5.cacheResolver 屬性

該屬性,用來(lái)指定緩存管理器。使用配置同 cacheManager 類(lèi)似,可自行百度。(cacheManager指定管理器/cacheResolver指定解析器 它倆也是二選一使用)

6.condition 屬性

條件判斷屬性,用來(lái)指定符合指定的條件下才可以緩存。也可以通過(guò) SpEL 表達(dá)式進(jìn)行設(shè)置。這個(gè)配置規(guī)則和上面表格中的配置規(guī)則是相同的。

@Cacheable(value = "user",condition = "#id>0")//傳入的 id 參數(shù)值>0才進(jìn)行緩存
User getUser(Integer id);
@Cacheable(value = "user",condition = "#a0>1")//傳入的第一個(gè)參數(shù)的值>1的時(shí)候才進(jìn)行緩存
User getUser(Integer id);
@Cacheable(value = "user",condition = "#a0>1 and #root.methodName eq 'getUser'")//傳入的第一個(gè)參數(shù)的值>1 且 方法名為 getUser 的時(shí)候才進(jìn)行緩存
User getUser(Integer id);

7.unless 屬性

unless屬性,意為"除非"的意思。即只有 unless 指定的條件為 true 時(shí),方法的返回值才不會(huì)被緩存。可以在獲取到結(jié)果后進(jìn)行判斷。

@Cacheable(value = "user",unless = "#result == null")//當(dāng)方法返回值為 null 時(shí),就不緩存
User getUser(Integer id);
@Cacheable(value = "user",unless = "#a0 == 1")//如果第一個(gè)參數(shù)的值是1,結(jié)果不緩存
User getUser(Integer id);

8.sync 屬性

該屬性用來(lái)指定是否使用異步模式,該屬性默認(rèn)值為 false,默認(rèn)為同步模式。異步模式指定 sync = true 即可,異步模式下 unless 屬性不可用。

到此這篇關(guān)于Spring Cache注解@Cacheable的九個(gè)屬性詳解的文章就介紹到這了,更多相關(guān)@Cacheable注解屬性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java中使用基本的正則表達(dá)式

    在Java中使用基本的正則表達(dá)式

    這篇文章主要介紹了在Java中使用基本的正則表達(dá)式,本文通過(guò)簡(jiǎn)要的案例,說(shuō)明了很多場(chǎng)景下的正則表達(dá)式的用法,列出了正則表達(dá)式匹配規(guī)則的表格,需要的朋友可以參考下
    2021-07-07
  • 如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)

    如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)

    這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-12-12
  • RabbitMQ 避免消息重復(fù)消費(fèi)的方法

    RabbitMQ 避免消息重復(fù)消費(fèi)的方法

    消費(fèi)者端實(shí)現(xiàn)冪等性,意味著消息永遠(yuǎn)不會(huì)消費(fèi)多次,即使收到了多條一樣的消息,這篇文章給大家分享RabbitMQ 避免消息重復(fù)消費(fèi)的方法,感興趣的朋友一起看看吧
    2024-03-03
  • activemq整合springboot使用方法(個(gè)人微信小程序用)

    activemq整合springboot使用方法(個(gè)人微信小程序用)

    這篇文章主要介紹了activemq整合springboot使用(個(gè)人微信小程序用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)

    mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)?lái)一篇mongo分布式鎖Java實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 最新版Eclipse安裝、配置圖文教程詳解

    最新版Eclipse安裝、配置圖文教程詳解

    這篇文章主要介紹了新版Eclipse安裝、配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 如何把char數(shù)組轉(zhuǎn)換成String

    如何把char數(shù)組轉(zhuǎn)換成String

    這篇文章主要介紹了如何把char數(shù)組轉(zhuǎn)換成String問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Java如何實(shí)現(xiàn)百萬(wàn)數(shù)據(jù)excel導(dǎo)出功能

    詳解Java如何實(shí)現(xiàn)百萬(wàn)數(shù)據(jù)excel導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)百萬(wàn)數(shù)據(jù)excel導(dǎo)出功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-02-02
  • Java編程構(gòu)造方法與對(duì)象的創(chuàng)建詳解

    Java編程構(gòu)造方法與對(duì)象的創(chuàng)建詳解

    這篇文章主要介紹了Java編程構(gòu)造方法與對(duì)象的創(chuàng)建詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java將對(duì)象寫(xiě)入文件讀出_序列化與反序列化的實(shí)例

    Java將對(duì)象寫(xiě)入文件讀出_序列化與反序列化的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java將對(duì)象寫(xiě)入文件讀出_序列化與反序列化的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論