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

@Cacheable、@CachePut和@CacheEvict三個(gè)注解的使用及區(qū)別

 更新時(shí)間:2026年05月21日 10:07:07   作者:dushky  
@Cacheable、@CachePut和@CacheEvict是Spring框架中的核心緩存注解,分別用于查詢、更新和刪除緩存操作,@Cacheable在緩存命中時(shí)跳過方法執(zhí)行;@CachePut強(qiáng)制執(zhí)行并更新緩存;@CacheEvict刪除或清空緩存,注意事項(xiàng)包括鍵的一致性、事務(wù)處理和條件過濾等

在 Spring 框架中,@Cacheable、@CachePut 和 @CacheEvict 是三個(gè)與緩存管理相關(guān)的核心注解,它們與 Redis 等緩存中間件結(jié)合使用時(shí),可以顯著提升應(yīng)用性能。

以下是它們的核心區(qū)別和適用場景:

@Cacheable

作用

在方法執(zhí)行前檢查緩存,如果緩存中存在對應(yīng)結(jié)果,直接返回緩存值,跳過方法執(zhí)行;若不存在,則執(zhí)行方法并將返回值存入緩存。

適用場景

  • 查詢操作(例如根據(jù) ID 查詢用戶信息)。
  • 適用于結(jié)果穩(wěn)定、不頻繁變更的數(shù)據(jù)。

關(guān)鍵參數(shù)

  • value/cacheNames:緩存名稱(如 "users")。
  • key:緩存的鍵(支持 SpEL 表達(dá)式)。
  • condition/unless:緩存條件(如 condition="#id > 10")。

示例

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 查詢數(shù)據(jù)庫
    return userRepository.findById(id);
}

@CachePut

作用

無論緩存是否存在,始終執(zhí)行方法,并將返回值更新到緩存中。適用于需要強(qiáng)制刷新緩存的場景。

適用場景

  • 更新操作(例如修改用戶信息后同步更新緩存)。
  • 需要確保緩存與數(shù)據(jù)庫數(shù)據(jù)一致。

關(guān)鍵參數(shù)

與 @Cacheable 相同,但需確保 key 的生成邏輯與 @Cacheable 一致,否則可能導(dǎo)致緩存不一致。

示例

@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    // 更新數(shù)據(jù)庫
    userRepository.update(user);
    return user; // 更新后的結(jié)果存入緩存
}

@CacheEvict

作用

刪除指定緩存條目或清空整個(gè)緩存。支持在方法調(diào)用觸發(fā)。

適用場景

  • 刪除操作(例如刪除用戶后清除緩存)。
  • 數(shù)據(jù)變更后需要清理舊緩存(如批量更新后清空列表緩存)。

關(guān)鍵參數(shù)

  • allEntries:是否清空整個(gè)緩存(默認(rèn)為 false,僅刪除 key 對應(yīng)的條目)。
  • beforeInvocation:是否在方法執(zhí)行前刪除緩存(默認(rèn)為 false,方法執(zhí)行后刪除)。

示例

@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

// 清空整個(gè)緩存
@CacheEvict(value = "users", allEntries = true)
public void refreshAllUsers() {
    // 無需實(shí)際邏輯,僅觸發(fā)緩存清理
}

三者的核心區(qū)別

注解是否執(zhí)行方法體緩存行為典型場景
@Cacheable緩存命中時(shí)跳過讀取緩存或?qū)懭胄陆Y(jié)果查詢(冪等操作)
@CachePut始終執(zhí)行強(qiáng)制更新緩存更新(非冪等)
@CacheEvict通常執(zhí)行刪除緩存條目或清空整個(gè)緩存刪除或清理緩存

注意事項(xiàng)

鍵的一致性

@Cacheable 和 @CachePut 的 key 生成邏輯必須一致,否則更新后可能無法覆蓋舊緩存。

事務(wù)與緩存的順序

默認(rèn)情況下,緩存操作在方法執(zhí)行后觸發(fā)。若方法有事務(wù),需確保緩存操作在事務(wù)提交后執(zhí)行(可通過 @Transactional 配置)。

條件過濾

使用 condition 和 unless 避免緩存無效數(shù)據(jù)(如 unless="#result == null")。

分布式鎖

在高并發(fā)場景下,結(jié)合分布式鎖(如 Redis 的 RedLock)避免緩存擊穿或雪崩。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA快速搭建jsp項(xiàng)目的圖文教程

    IDEA快速搭建jsp項(xiàng)目的圖文教程

    這篇文章主要介紹了IDEA快速搭建jsp項(xiàng)目的圖文教程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 淺析Spring4新特性概述

    淺析Spring4新特性概述

    Spring 4.1并沒有特別吸引眼球的地方,主要還是增強(qiáng)和一些依賴的版本升級。本文重點(diǎn)給大家介紹Spring4新特性概述,感興趣的朋友一起看看吧
    2017-09-09
  • JVM與操作系統(tǒng)之間的關(guān)系詳解

    JVM與操作系統(tǒng)之間的關(guān)系詳解

    JVM與操作系統(tǒng)之間是依賴與被依賴的關(guān)系,JVM依賴于操作系統(tǒng)提供的資源和服務(wù),同時(shí)JVM也起到了抽象與隔離的作用,為Java程序提供了一個(gè)統(tǒng)一的、與平臺無關(guān)的運(yùn)行環(huán)境,提高了Java程序的安全性
    2025-03-03
  • Java實(shí)現(xiàn)Html保存為.mhtml文件的代碼邏輯

    Java實(shí)現(xiàn)Html保存為.mhtml文件的代碼邏輯

    文章介紹了實(shí)現(xiàn)將HTML字符串保存為.mhtml文件的代碼邏輯,包括通過URL和Cookie免密獲取HTML字符串,將HTML中的圖片、CSS、JS轉(zhuǎn)換為base64字符串,刪除不需要的布局和內(nèi)容,最終將替換后的HTML保存為.mhtml文件,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Maven設(shè)置使用自定義的jar包到自己本地倉庫

    Maven設(shè)置使用自定義的jar包到自己本地倉庫

    今天小編就為大家分享一篇關(guān)于Maven設(shè)置使用自定義的jar包到自己本地倉庫的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 詳解Spring中的AOP及AspectJ五大通知注解

    詳解Spring中的AOP及AspectJ五大通知注解

    這篇文章主要介紹了詳解Spring中的AOP及AspectJ五大通知注解,AOP面向切面編程是一種新的方法論,是對傳統(tǒng)OOP面向?qū)ο缶幊痰难a(bǔ)充,AOP?的主要編程對象是切面(aspect),切面模塊化橫切關(guān)注點(diǎn),需要的朋友可以參考下
    2023-08-08
  • java版數(shù)獨(dú)游戲核心算法(一)

    java版數(shù)獨(dú)游戲核心算法(一)

    這篇文章主要為大家詳細(xì)介紹了java版數(shù)獨(dú)游戲的核心算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于Java實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)

    基于Java實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于Java實(shí)現(xiàn)抽獎(jiǎng)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java基礎(chǔ)教程之實(shí)現(xiàn)接口

    Java基礎(chǔ)教程之實(shí)現(xiàn)接口

    這篇文章主要介紹了Java基礎(chǔ)教程之實(shí)現(xiàn)接口,也可以說是實(shí)施接口,因?yàn)榻涌谥皇嵌x,最終要實(shí)現(xiàn)它,本文就專門講解接口的實(shí)現(xiàn),需要的朋友可以參考下
    2014-08-08
  • SpringSecurity實(shí)現(xiàn)自定義登錄接口的詳細(xì)過程

    SpringSecurity實(shí)現(xiàn)自定義登錄接口的詳細(xì)過程

    本文詳細(xì)介紹了如何使用SpringSecurity實(shí)現(xiàn)自定義登錄接口,文章還涉及了對用戶實(shí)體類的增強(qiáng)以滿足詳細(xì)信息的需求,適合需要深入了解和實(shí)現(xiàn)SpringSecurity自定義登錄功能的開發(fā)者,感興趣的朋友跟隨小編一起看看吧
    2024-10-10

最新評論

霸州市| 泸水县| 江孜县| 临桂县| 许昌市| 贺兰县| 偃师市| 绥阳县| 历史| 弋阳县| 临夏县| 梁山县| 德昌县| 丰城市| 海口市| 历史| 安多县| 临漳县| 鹰潭市| 南雄市| 南江县| 郑州市| 高州市| 东宁县| 金沙县| 泸西县| 托里县| 桃源县| 衡阳县| 陆川县| 阳春市| 郓城县| 泽普县| 怀仁县| 台北市| 玉树县| 蒙自县| 天全县| 抚顺县| 台中市| 岳西县|