亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用@CacheEvict清除指定下所有緩存

發布時間:2021-12-24 20:55:32 來源:億速云 閱讀:804 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關如何使用@CacheEvict清除指定下所有緩存,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

@CacheEvict清除指定下所有緩存

@CacheEvict(cacheNames = "parts:grid",allEntries = true)

此注解會清除part:grid下所有緩存

@CacheEvict要求指定一個或多個緩存,使之都受影響。此外,還提供了一個額外的參數allEntries 。表示是否需要清除緩存中的所有元素。默認為false,表示不需要。

當指定了allEntries為true時,Spring Cache將忽略指定的key。有的時候我們需要Cache一下清除所有的元素。

@Cacheable 緩存 @CachePut:緩存更新 @CacheEvict:緩存刪除

@Cacheable 緩存

說明:在支持Spring Cache的環境下,對于使用@Cacheable標注的方法,Spring在每次執行前都會檢查Cache中是否存在相同key的緩存元素,如果存在就不再執行該方法,而是直接從緩存中獲取結果進行返回,否則才會執行并將返回結果存入指定的緩存中。

// @since 3.1  可以標注在方法上、類上  下同
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
    // 緩存名稱  可以寫多個,key的真正組成,以cacheName為前綴,多個就會有多個key產生
    @AliasFor("cacheNames")
    String[] value() default {};
    @AliasFor("value")
    String[] cacheNames() default {};
    // 支持寫SpEL,切可以使用#root,#參數名”或者“#p參數index”
    //詳情去 https://blog.csdn.net/dalong_bamboo/article/details/103844076
    String key() default "";
    // Mutually exclusive:它和key屬性互相排斥。請只使用一個,直接寫bean的名字就可以
    String keyGenerator() default "";
   //用于選擇使用哪個cacheManager
    String cacheManager() default "";
    //用戶定義如何處理緩存,實現 org.springframework.cache.interceptor.CacheResolver接口
    String cacheResolver() default "";
    // 表示在哪種情況下才緩存結果,可使用SpEL,可以使用#root。  只有true時,才會作用在這個方法上
    String condition() default "";
    // 表示在哪種情況下不緩存結果,可以寫SpEL #root,并且可以使用#result拿到方法返回值    經典值#result == null
    String unless() default "";
    
    // true:表示強制同步執行。(若多個線程試圖為**同一個鍵**加載值,以同步的方式來進行目標方法的調用)
    // 同步的好處是:后一個線程會讀取到前一個緩存的緩存數據,不用再查庫了~~~ 
    // 默認是false,不開啟同步one by one的
    // @since 4.3  注意是sync而不是Async
    // 它的解析依賴于Spring4.3提供的Cache.get(Object key, Callable<T> valueLoader);方法
    boolean sync() default false;
}

@CachePut:緩存更新

說明:@CachePut也可以聲明一個方法支持緩存功能。

與@Cacheable不同的是使用@CachePut標注的方法在執行前不會去檢查緩存中是否存在之前執行過的結果,而是每次都會執行該方法,并將執行結果以鍵值對的形式存入指定的緩存中。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
 @AliasFor("cacheNames")
 String[] value() default {};
 @AliasFor("value")
 String[] cacheNames() default {};
 // 注意:它和上面區別是。此處key它還能使用#result
 String key() default "";
 String keyGenerator() default "";
 String cacheManager() default "";
 String cacheResolver() default "";
 String condition() default "";
 String unless() default "";
}

@CacheEvict:緩存刪除

說明:@CacheEvict是用來標注在需要清除緩存元素的方法或類上的。當標記在一個類上時表示其中所有的方法的執行都會觸發緩存的清除操作。

@CacheEvict可以指定的屬性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的語義與@Cacheable對應的屬性類似。

即value表示清除操作是發生在哪些Cache上的(對應Cache的名稱);key表示需要清除的是哪個key,如未指定則會使用默認策略生成的key;condition表示清除操作發生的條件。

下面我們來介紹一下新出現的兩個屬性allEntries和beforeInvocation。

allEntries屬性,allEntries是boolean類型,表示是否需要清除緩存中的所有元素。

默認為false,表示不需要。當指定了allEntries為true時,Spring Cache將忽略指定的key。

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

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Cacheable {
 @AliasFor("cacheNames")
 String[] value() default {};
 @AliasFor("value")
 String[] cacheNames() default {};
 // 它也能使用#result
 String key() default "";
 String keyGenerator() default "";
 String cacheManager() default "";
 String cacheResolver() default "";
 String condition() default "";
 // 是否把上面cacheNames指定的所有的緩存都清除掉,默認false
 boolean allEntries() default false;
 // 是否讓清理緩存動作在目標方法之前執行,默認是false(在目標方法之后執行)
 // 注意:若在之后執行的話,目標方法一旦拋出異常了,那緩存就清理不掉了~~~~
 boolean beforeInvocation() default false;
}

關于如何使用@CacheEvict清除指定下所有緩存就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 大方县| 开原市| 商洛市| SHOW| 体育| 县级市| 甘德县| 桑植县| 贵溪市| 阿拉尔市| 宣威市| 马鞍山市| 泰州市| 洪江市| 白山市| 新丰县| 正蓝旗| 万源市| 札达县| 图片| 墨江| 德化县| 衡山县| 东平县| 宿迁市| 衡水市| 根河市| 伊吾县| 青铜峡市| 盐津县| 双桥区| 广丰县| 东乌珠穆沁旗| 曲松县| 开阳县| 海伦市| 麟游县| 城固县| 黄山市| 平昌县|