久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

spring redis注解如何實現(xiàn)緩存機制

153次閱讀
沒有評論

共計 3096 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家分享的是有關(guān) spring redis 注解如何實現(xiàn)緩存機制的內(nèi)容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考。一起跟隨丸趣 TV 小編過來看看吧。

1、xml 配置

bean id= poolConfigTax >

2、緩存注解 @Cacheable、@CacheEvict、@CachePut 詳解
一、@Cacheable 用法詳解
1、用在哪里?用在方法或者類上。
2、這兩種用法有什么區(qū)別?
用在方法上表示:該方法的返回值將被緩存起來
用在類上表示:表示該類的所有方法都支持該注解
3、使用后的結(jié)果是什么?下次使用相同方法和相同參數(shù)調(diào)用這個方法的時候?qū)⒅苯訌木彺嫒≈担恍枰俅螆?zhí)行該方法。
4、返回值在緩存中怎么存儲的?以鍵值對的方式存儲在緩存中,value 就是返回值,key 由兩種策略生成:默認(rèn)策略和自定義策略
5、默認(rèn)策略和默認(rèn)策略怎么用?
默認(rèn)策略:在 value 值后雙“::”拼接,形參列表,當(dāng)形參是對象時,使用 json 格式:

@CacheConfig(cacheNames= enterprise)// !-- 聲明緩存使用的緩存名稱 -- 
public interface EnterpriseRepo extends JpaRepository Enterprise, Integer ,JpaSpecificationExecutor Enterprise {@Cacheable(value= cash2)
 Enterprise findByid(Integer id);
 @CachePut(value= cash2)
 Enterprise save(Enterprise enterprise);
}

自定義策略:key 屬性是用來指定 Spring 緩存方法的返回結(jié)果時對應(yīng)的 key 的。該屬性支持 SpringEL 表達(dá)式。當(dāng)我們沒有指定該屬性時,Spring 將使用默認(rèn)策略生成 key。

自定義策略是指我們可以通過 Spring 的 EL 表達(dá)式來指定我們的 key。這里的 EL 表達(dá)式可以使用方法參數(shù)及它們對應(yīng)的屬性。使用方法參數(shù)時我們可以直接使用“# 參數(shù)名”或者“#p 參數(shù) index”。下面是幾個使用參數(shù)作為 key 的示例。

@Cacheable(value= users , key= #id)
 public User find(Integer id) {
 return null;
 @Cacheable(value= users , key= #p0)
 public User find(Integer id) {
 return null;
 @Cacheable(value= users , key= #user.id)
 public User find(User user) {
 return null;
 @Cacheable(value= users , key= #p0.id)
 public User find(User user) {return null;}

除了上述使用方法參數(shù)作為 key 之外,Spring 還為我們提供了一個 root 對象可以用來生成 key。通過該 root 對象我們可以獲取到以下信息。
spring redis 注解如何實現(xiàn)緩存機制

當(dāng)我們要使用 root 對象的屬性作為 key 時我們也可以將“#root”省略,因為 Spring 默認(rèn)使用的就是 root 對象的屬性。如:

@Cacheable(value={ users , xxx}, key= caches[1].name )
public User find(User user) {return null;}

6、condition 屬性指定發(fā)生的條件

有的時候我們可能并不希望緩存一個方法所有的返回結(jié)果。通過 condition 屬性可以實現(xiàn)這一功能。condition 屬性默認(rèn)為空,表示將緩存所有的調(diào)用情形。其值是通過 SpringEL 表達(dá)式來指定的,當(dāng)為 true 時表示進行緩存處理;當(dāng)為 false 時表示不進行緩存處理,即每次調(diào)用該方法時該方法都會執(zhí)行一次。如下示例表示只有當(dāng) user 的 id 為偶數(shù)時才會進行緩存。

@Cacheable(value={ users}, key= #user.id , condition= #user.id%2==0 )
public User find(User user) {System.out.println( find user by user + user);
 return user;
}

二、@CachePut

在支持 Spring Cache 的環(huán)境下,對于使用 @Cacheable 標(biāo)注的方法,Spring 在每次執(zhí)行前都會檢查 Cache 中是否存在相同 key 的緩存元素,如果存在就不再執(zhí)行該方法,而是直接從緩存中獲取結(jié)果進行返回,否則才會執(zhí)行并將返回結(jié)果存入指定的緩存中。@CachePut 也可以聲明一個方法支持緩存功能。與 @Cacheable 不同的是使用 @CachePut 標(biāo)注的方法在執(zhí)行前不會去檢查緩存中是否存在之前執(zhí)行過的結(jié)果,而是每次都會執(zhí)行該方法,并將執(zhí)行結(jié)果以鍵值對的形式存入指定的緩存中。
  一般使用在保存,更新方法中。

@CachePut 也可以標(biāo)注在類上和方法上。使用 @CachePut 時我們可以指定的屬性跟 @Cacheable 是一樣的。

@CachePut(“users”)// 每次都會執(zhí)行方法,并將結(jié)果存入指定的緩存中

public User find(Integer id) {return null;}

三、@CacheEvict

@CacheEvict 是用來標(biāo)注在需要清除緩存元素的方法或類上的。當(dāng)標(biāo)記在一個類上時表示其中所有的方法的執(zhí)行都會觸發(fā)緩存的清除操作。@CacheEvict 可以指定的屬性有 value、key、condition、allEntries 和 beforeInvocation。其中 value、key 和 condition 的語義與 @Cacheable 對應(yīng)的屬性類似。即 value 表示清除操作是發(fā)生在哪些 Cache 上的(對應(yīng) Cache 的名稱);key 表示需要清除的是哪個 key,如未指定則會使用默認(rèn)策略生成的 key;condition 表示清除操作發(fā)生的條件。下面我們來介紹一下新出現(xiàn)的兩個屬性 allEntries 和 beforeInvocation。
1、allEntries 屬性
allEntries 是 boolean 類型,表示是否需要清除緩存中的所有元素。默認(rèn)為 false,表示不需要。當(dāng)指定了 allEntries 為 true 時,Spring Cache 將忽略指定的 key。有的時候我們需要 Cache 一下清除所有的元素,這比一個一個清除元素更有效率。

@CacheEvict(value= users , allEntries=true)
public void delete(Integer id) {System.out.println( delete user by id: + id);
}

2、beforeInvocation 屬性
清除操作默認(rèn)是在對應(yīng)方法成功執(zhí)行之后觸發(fā)的,即方法如果因為拋出異常而未能成功返回時也不會觸發(fā)清除操作。使用 beforeInvocation 可以改變觸發(fā)清除操作的時間,當(dāng)我們指定該屬性值為 true 時,Spring 會在調(diào)用該方法之前清除緩存中的指定元素。

@CacheEvict(value= users , beforeInvocation=true)
public void delete(Integer id) {System.out.println( delete user by id: + id);
}

感謝各位的閱讀!關(guān)于 spring redis 注解如何實現(xiàn)緩存機制就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

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

丸趣 TV 網(wǎng) - 提供最優(yōu)質(zhì)的資源集合!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-18發(fā)表,共計3096字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 米林县| 白河县| 兴仁县| 广德县| 滕州市| 洪泽县| 皮山县| 梓潼县| 古田县| 新巴尔虎右旗| 苍梧县| 铜鼓县| 文山县| 革吉县| 咸丰县| 环江| 南阳市| 改则县| 呼图壁县| 武隆县| 新河县| 金坛市| 从化市| 黔江区| 德昌县| 裕民县| 平顺县| 长治县| 英吉沙县| 江华| 宁晋县| 银川市| 得荣县| 桃江县| 韶山市| 鄄城县| 泊头市| 乌什县| 宿松县| 军事| 湘潭县|