溫馨提示×

溫馨提示×

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

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

使用@CacheEvict?多參數(shù)怎么匹配刪除

發(fā)布時(shí)間:2021-12-31 11:27:01 來源:億速云 閱讀:148 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“使用@CacheEvict 多參數(shù)怎么匹配刪除”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“使用@CacheEvict 多參數(shù)怎么匹配刪除”這篇文章吧。

@CacheEvict 多參數(shù)匹配刪除

如果@Cacheable(“XXX”)

Object getXXX(String a, String b, String c);

spring的緩存使用的key是ESPL表達(dá)式,然后翻看源碼key默認(rèn)用的生成方式是org.springframework.cache.interceptor.SimpleKeyGenerator

大于1個(gè)參數(shù)走的是最后一個(gè)方法

 /**
  * Generate a key based on the specified parameters.
  */
 public static Object generateKey(Object... params) {
  if (params.length == 0) {
   return SimpleKey.EMPTY;
  }
  if (params.length == 1) {
   Object param = params[0];
   if (param != null && !param.getClass().isArray()) {
    return param;
   }
  }
  return new SimpleKey(params);
 }

然后查看org.springframework.cache.interceptor.SimpleKey對應(yīng)代碼,發(fā)現(xiàn)返回的其實(shí)是SimpleKey

 /**
  * Create a new {@link SimpleKey} instance.
  * @param elements the elements of the key
  */
 public SimpleKey(Object... elements) {
  Assert.notNull(elements, "Elements must not be null");
  this.params = new Object[elements.length];
  System.arraycopy(elements, 0, this.params, 0, elements.length);
  this.hashCode = Arrays.deepHashCode(this.params);
 }

解決思路

方案一

單獨(dú)寫一個(gè)自定義的KeyGenerator,處理對應(yīng)的key。(之前的redis的文章已寫過,所以不重復(fù)寫了)

下面博文的 MyKeyGenerator 這個(gè)類

sprintboot使用spring-security包,緩存內(nèi)存與redis共存

方案二

@Cacheable(value=“XXX”, key=“xxxx”)
@CacheEvict(value=“XXX”, key=“xxxx”)

做相應(yīng)的key配置

數(shù)組的話可以使用 key = “#root.args[0]”

參數(shù)參考如下:

名字位置描述示例
methodNameroot object當(dāng)前被調(diào)用的方法名#root.methodName
methodroot object當(dāng)前被調(diào)用的方法#root.method .name
targetroot object當(dāng)前被調(diào)用的目標(biāo)對象#root.target
targetClassroot object當(dāng)前被調(diào)用的目標(biāo)對象類#root.targetClass
argsroot object當(dāng)前被調(diào)用的方法的參數(shù)列表#root.args[0]
cachesroot object當(dāng)前方法調(diào)用使用的緩存列表#root.caches[0].name
argument nameevaluation context方法參數(shù)的名字,可以直接#參數(shù)名,也可以使用#p0或#a0的形式,0代表參數(shù)的索引#iban、#a0、#p0
resultevaluation context方法執(zhí)行后的返回值#result

以上是“使用@CacheEvict 多參數(shù)怎么匹配刪除”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI