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

Java中的@Cacheable注解的作用詳解

 更新時(shí)間:2023年10月07日 09:18:08   作者:Myovlmx  
這篇文章主要介紹了Java中的@Cacheable注解的作用詳解, 使用 @Cacheable 注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法,需要的朋友可以參考下

一、@Cacheable的作用

1、緩存使用步驟:

@Cacheable這個(gè)注解,用它就是為了使用緩存的。所以我們可以先說一下緩存的使用步驟:

  • 開啟基于注解的緩存,使用 @EnableCaching 標(biāo)識(shí)在 SpringBoot 的主啟動(dòng)類上。
  • 標(biāo)注緩存注解即可

 使用  @Cacheable  注解就可以將運(yùn)行結(jié)果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調(diào)用方法

2、@Cacheable作用:

把方法的返回值添加到Ehcache緩存中。

3、常用屬性介紹:

(1)cacheNames/value 用來指定緩存組件的名字,將方法的返回結(jié)果放在哪個(gè)緩存中,可以是數(shù)組的方式,支持指定多個(gè)緩存

@Cacheable(cacheNames = "streamUrl", key = "#eventId", unless = "#result == null")
// 數(shù)組
@Cacheable(cacheNames = {"streamUrl", "test"}, key = "#eventId", unless = "#result == null")

(2)key:緩存數(shù)據(jù)時(shí)使用的 key。默認(rèn)使用的是方法參數(shù)的值??梢允褂?spEL 表達(dá)式去編寫。

@Cacheable(cacheNames = "streamUrl", key = "#eventId + '[' + #id + ']'", unless = "#result == null")

(3)keyGenerator:key 的生成器,可以自己指定 key 的生成器,通過這個(gè)生成器來生成 key。

@Cacheable(value = "ip", keyGenerator = "cacheKeyGenerator")
public IPResponse query(String ip) {
return ipAPI.query(ip);
}

這樣放入緩存中的 key 的生成規(guī)則就按照你自定義的 keyGenerator 來生成。

不過需要注意的是: @Cacheable 的屬性,key 和 keyGenerator 使用的時(shí)候,一般二選一。 

(4)condition:符合條件的情況下才緩存。方法返回的數(shù)據(jù)要不要緩存,可以做一個(gè)動(dòng)態(tài)判斷

// 表示 id 大于 1 才進(jìn)行緩存
@Cacheable(cacheNames = "streamUrl", condition = "#id > 1")

(5)unless:否定緩存。當(dāng) unless 指定的條件為 true ,方法的返回值就不會(huì)被緩存。當(dāng)然你也可以獲取到結(jié)果進(jìn)行判斷。(通過  #result  獲取方法結(jié)果)

(6)sync:是否使用異步模式。默認(rèn)是方法執(zhí)行完,以同步的方式將方法返回的結(jié)果存在緩存中。

4、spEL 編寫 key

前面說過,緩存的 key 支持使用 spEL 表達(dá)式去編寫,下面總結(jié)一下使用 spEL 去編寫 key 可以用的一些元數(shù)據(jù):

二、@CacheEvict的作用

@CacheEvict是用來標(biāo)注在需要清除緩存元素的方法或類上的。當(dāng)標(biāo)記在一個(gè)類上時(shí),表示其中所有的方法的執(zhí)行都會(huì)觸發(fā)緩存的清除操作。

@CacheEvict可以指定的屬性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的語(yǔ)義與@Cacheable對(duì)應(yīng)的屬性類似。

即value表示清除操作是發(fā)生在哪些Cache上的(對(duì)應(yīng)Cache的名稱);

key表示需要清除的是哪個(gè)key,如未指定則會(huì)使用默認(rèn)策略生成的key;

condition表示清除操作發(fā)生的條件。下面我們來介紹一下新出現(xiàn)的兩個(gè)屬性allEntries和beforeInvocation。

2、allEntries屬性

allEntries是boolean類型,表示是否需要清除緩存中的所有元素。默認(rèn)為false,表示不需要。當(dāng)指定了allEntries為true時(shí),清除緩存中的所有元素,Spring Cache將忽略指定的key。

有的時(shí)候我們需要Cache一下清除所有的元素,這比一個(gè)一個(gè)清除元素更有效率。

3、beforeInvocation屬性

清除操作默認(rèn)是在對(duì)應(yīng)方法成功執(zhí)行之后觸發(fā)的,即方法如果因?yàn)閽伋霎惓6茨艹晒Ψ祷貢r(shí)也不會(huì)觸發(fā)清除操作。使用beforeInvocation可以改變觸發(fā)清除操作的時(shí)間,當(dāng)我們指定該屬性值為true時(shí),Spring會(huì)在調(diào)用該方法之前清除緩存中的指定元素

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

相關(guān)文章

  • Java通過SSM完成水果商城批發(fā)平臺(tái)流程

    Java通過SSM完成水果商城批發(fā)平臺(tái)流程

    這是一個(gè)使用了java+SSM開發(fā)的網(wǎng)上水果商城批發(fā)平臺(tái),是一個(gè)實(shí)戰(zhàn)小練習(xí),具有水果商城批發(fā)該有的所有功能,感興趣的朋友快來看看吧
    2022-06-06
  • 一文帶你了解Java中的Object類及類中方法

    一文帶你了解Java中的Object類及類中方法

    Object是Java默認(rèn)提供的一個(gè)類。Java里面除了Object類,所有的類都是存在繼承關(guān)系的。默認(rèn)會(huì)繼承Object父?類。即所有類的對(duì)象都可以使用Object的引用進(jìn)行接收。本文就來為大家詳細(xì)講講Object類及類中方法,感興趣的可以了解一下
    2022-08-08
  • 解析使用jdbc,hibernate處理clob/blob字段的詳解

    解析使用jdbc,hibernate處理clob/blob字段的詳解

    本篇是對(duì)使用jdbc,hibernate處理clob/blob字段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Java代碼實(shí)現(xiàn)循環(huán)隊(duì)列的示例代碼

    Java代碼實(shí)現(xiàn)循環(huán)隊(duì)列的示例代碼

    隊(duì)列作為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),是程序員的入門課。也是所有程序員必須掌握的一種數(shù)據(jù)結(jié)構(gòu),隊(duì)列在程序中廣泛應(yīng)用,因此我們應(yīng)該對(duì)隊(duì)列有深入的了解,接下來我們通過代碼來對(duì)隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)進(jìn)行深度解析,感興趣的朋友一起看看吧
    2021-09-09
  • Java接入通義千問的簡(jiǎn)單方法示例

    Java接入通義千問的簡(jiǎn)單方法示例

    ? 通義千問是阿里云開發(fā)的大語(yǔ)言模型(Large language Model )LLM,旨在提供廣泛的知識(shí)和普適性,可以理解和回答各領(lǐng)域中的問題,這篇文章主要給大家介紹了關(guān)于Java接入通義千問的簡(jiǎn)單方法,需要的朋友可以參考下
    2024-02-02
  • springboot整合druid連接池的步驟

    springboot整合druid連接池的步驟

    這篇文章主要介紹了springboot整合druid連接池的步驟,幫助大家更好的理解和學(xué)習(xí)springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • 最新評(píng)論