最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Cache注解@Cacheable的九個屬性詳解

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

1.value/cacheNames 屬性

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

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

2.key屬性

可以通過 key 屬性來指定緩存數(shù)據(jù)所使用的的 key,默認使用的是方法調用傳過來的參數(shù)作為 key。最終緩存中存儲的內容格式為:Entry<key,value> 形式。

  • 如果請求沒有參數(shù):key=new SimpleKey();
  • 如果請求有一個參數(shù):key=參數(shù)的值
  • 如果請求有多個參數(shù):key=newSimpleKey(params);(你只要知道 key不會為空就行了)

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

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

使用示例如下:

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

3.keyGenerator 屬性

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

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 表達式編寫
     */
    /*@Bean("myKeyGenerator")
    public KeyGenerator keyGenerator(){
        return ( target,  method, params)-> method.getName()+ Arrays.asList(params).toString();
    }*/
}

4.cacheManager 屬性

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

CacheManger描述
SimpleCacheManager使用簡單的Collection來存儲緩存,主要用于測試
ConcurrentMapCacheManager使用ConcurrentMap作為緩存技術(默認)
NoOpCacheManager測試用
EhCacheCacheManager使用EhCache作為緩存技術,以前在hibernate的時候經常用
GuavaCacheManager使用google guava的GuavaCache作為緩存技術
HazelcastCacheManager使用Hazelcast作為緩存技術
JCacheCacheManager使用JCache標準的實現(xiàn)作為緩存技術,如Apache Commons JCS
RedisCacheManager使用Redis作為緩存技術

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

5.cacheResolver 屬性

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

6.condition 屬性

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

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

7.unless 屬性

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

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

8.sync 屬性

該屬性用來指定是否使用異步模式,該屬性默認值為 false,默認為同步模式。異步模式指定 sync = true 即可,異步模式下 unless 屬性不可用。

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

相關文章

  • Java實現(xiàn)企業(yè)微信消息推送功能的詳細步驟

    Java實現(xiàn)企業(yè)微信消息推送功能的詳細步驟

    這篇文章主要介紹了Java實現(xiàn)企業(yè)微信消息推送功能,本文圖文實例代碼相結合給大家介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 一文詳解如何在Java中自定義異常類

    一文詳解如何在Java中自定義異常類

    這篇文章主要介紹了如何在Java中自定義異常類的相關資料,在Java編程中開發(fā)者可以通過繼承Exception類或其子類創(chuàng)建自定義異常,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • 關于SpringBoot的熱部署方案

    關于SpringBoot的熱部署方案

    這篇文章主要介紹了關于SpringBoot的熱部署方案,每次修改代碼就得將項目重啟,重新部署,對于一些大型應用來說,重啟時間需要花費大量的時間成本,本文就來詳解熱部署方案,需要的朋友可以參考下
    2023-05-05
  • java中關于轉義字符的一個bug

    java中關于轉義字符的一個bug

    本文主要介紹了java中關于轉義字符的一個bug。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java讀取無限量文件的思路和完整代碼

    Java讀取無限量文件的思路和完整代碼

    這篇文章主要介紹了Java讀取無限量文件的思路,文章還提供了完整實現(xiàn)代碼和核心優(yōu)化點解析,包括NIO.2替代傳統(tǒng)IO、分場景讀取、自定義線程池等,需要的朋友可以參考下
    2026-03-03
  • Java字符串常見的操作(比較,查找,替換等)

    Java字符串常見的操作(比較,查找,替換等)

    在Java當中,為字符串類提供了豐富的操作方法,對于字符串,我們常見的操作就是:字符串的比較、查找、替換、拆分、截取以及其他的一些操作,本文就詳細的介紹一下,感興趣的可以了解一下
    2022-01-01
  • Java實現(xiàn)SSH模式加密

    Java實現(xiàn)SSH模式加密

    這篇文章主要介紹了Java實現(xiàn)SSH模式加密的相關資料,需要的朋友可以參考下
    2016-01-01
  • Spring boot 路徑映射的實現(xiàn)

    Spring boot 路徑映射的實現(xiàn)

    這篇文章主要介紹了spring boot 路徑映射的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java在Linux上調用FFmpeg實現(xiàn)視頻截圖的完整指南

    Java在Linux上調用FFmpeg實現(xiàn)視頻截圖的完整指南

    在Linux環(huán)境下使用Java與FFmpeg命令交互進行視頻截圖是多媒體處理中的常見任務,本文介紹了如何在Java程序中執(zhí)行FFmpeg命令,通過提供具體代碼示例來展示在特定時間點獲取視頻靜態(tài)圖像的方法,需要的朋友可以參考下
    2025-08-08
  • Centos下SpringBoot項目啟動與停止腳本的方法

    Centos下SpringBoot項目啟動與停止腳本的方法

    這篇文章主要介紹了Centos下SpringBoot項目啟動與停止腳本的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11

最新評論

石家庄市| 略阳县| 克拉玛依市| 巴林左旗| 合肥市| 广水市| 金堂县| 南召县| 淄博市| 肥城市| 洪泽县| 盐边县| 芮城县| 民县| 平度市| 儋州市| 洛宁县| 南京市| 连城县| 台北县| 莎车县| 墨江| 晋州市| 泊头市| 万荣县| 泾川县| 东港市| 桦川县| 云林县| 伊金霍洛旗| 九龙城区| 称多县| 阳信县| 化隆| 封开县| 富阳市| 礼泉县| 通许县| 武功县| 土默特左旗| 延边|