Spring @Cacheable緩存注解用法說明

注解Cacheable 是 Spring 框架中用于緩存數據的方法或類的注解。通過使用這個注解,你可以避免重復計算和重復獲取數據,從而提高應用程序的性能。

基本用法

  • 引入依賴

確保在你的項目中引入了 Spring Cache 相關的依賴。如果你使用的是 Spring Boot,可以在 pom.xml 中添加以下依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
  • 啟用緩存

在主類或配置類上使用 @EnableCaching 注解來啟用緩存功能。

@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  • 使用 @Cacheable 注解

在需要緩存的方法上使用 @Cacheable 注解。

@Service
public class UserService {@Cacheable("lizz:users")public User getUserById(Long id) {// 模擬一個耗時的數據庫查詢try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}return new User(id, "John Doe");}
}
  • 配置緩存

????????Spring 提供了多種緩存實現,包括內存緩存(如 ConcurrentMapCache)、第三方緩存(如 EhCache、Caffeine、Redis 等)。可以在配置文件(如 application.propertiesapplication.yml)中進行配置。

  • 使用 ConcurrentMapCache本地緩存
spring:cache:type: simple
  • 使用 Redis 作為緩存
spring:cache:type: redisredis:host: 172.1.1.11port: 6379

高級用法

  • 緩存條件:condition

使用 condition 屬性指定緩存條件,只換成id大于10的數據緩存

@Cacheable(value = "lizz:users", condition = "#id > 10")
public User getUserById(Long id) {// ...
}
  • ?自定義緩存鍵

?使用 key 屬性自定義緩存鍵。

@Cacheable(value = "users", key = "#root.methodName + #id")
public User getUserById(Long id) {// ...
}
  • ?同步更新:sync

sync=true時,如果多個線程同時訪問緩存中沒有的數據,只有一個線程會執行方法以加載數據,其他線程會等待加載完成并獲取相同的結果。這可以防止緩存穿透(即多個線程同時訪問緩存時都繞過緩存直接訪問底層存儲)。

@Cacheable(value = "users", sync = true)
public User getUserById(Long id) {// ...
}

緩存失效:@CacheEvict

  • allEntries=true:清除所有緩存數據
@CacheEvict(value = "lizz:users", allEntries = true)
public void clearCache() {// //清除全部緩存相關的其他業務操作
}
  • key = "#id" :清除緩存集合中指定key的數據
@CacheEvict(value = "lizz:users", key = "#id")
public void delUser(Long id) {//清除id緩存相關的其他業務操作
}
  • 緩存同步:@CachePut

?使用 @CachePut 注解更新緩存。

@CachePut(value = "lizz:users", key = "#user.id")
public User updateUser(User user) {// 更新用戶的邏輯return user;
}

結合緩存組件

  • 引入caffeine

        <!--快速本地緩存--><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId></dependency>
  • 使用caffeine作為springcache管理
@EnableCaching
@Configuration
public class CaffeineCacheConfig {@Beanpublic CacheManager cacheManager() {CaffeineCacheManager cacheManager = new CaffeineCacheManager("ta:region");cacheManager.setCaffeine(caffeineCacheBuilder());return cacheManager;}Caffeine<Object, Object> caffeineCacheBuilder() {return Caffeine.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).maximumSize(100);}
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/40661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40661.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

中英雙語介紹中國的城市:上海市(Shanghai)

中文版 上海市是中國最大的城市之一&#xff0c;也是全球重要的金融、貿易和航運中心。作為一座現代化的國際大都市&#xff0c;上海以其繁華的商業區、豐富的文化遺產和多樣化的經濟結構而聞名。以下是對上海市的詳細介紹&#xff0c;包括其地理位置、人口、經濟、教育、文化…

qt結合vs2022安裝

進入清華大學開源軟件&#xff1a; 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror 下載完成后&#xff0c;雙擊進行安裝&#xff1a; 進入郵箱進行驗證&#xff1a; 可能是因為網絡問題&#xff0c;無法安裝。 重新安裝5.12.12版本。 安裝后啟動失敗&#xff0c;重新…

后端接口設計考慮要點

1. 接口參數校驗 入參校驗&#xff1a;確保必要參數不為空&#xff0c;限制長度和格式&#xff08;例如郵箱格式&#xff09;。返回值校驗&#xff1a;確定返回值不為空&#xff0c;為空時返回與前端協商的默認值。 2. 接口擴展性 設計通用接口而非僅針對特定業務流程的接口…

橫截面交易策略:概念與示例

數量技術宅團隊在CSDN學院推出了量化投資系列課程 歡迎有興趣系統學習量化投資的同學&#xff0c;點擊下方鏈接報名&#xff1a; 量化投資速成營&#xff08;入門課程&#xff09; Python股票量化投資 Python期貨量化投資 Python數字貨幣量化投資 C語言CTP期貨交易系統開…

數據結構--單鏈表實現

歡迎光顧我的homepage 前言 鏈表和順序表都是線性表的一種&#xff0c;但是順序表在物理結構和邏輯結構上都是連續的&#xff0c;但鏈表在邏輯結構上是連續的&#xff0c;而在物理結構上不一定連續&#xff1b;來看以下圖片來認識鏈表與順序表的差別 這里以動態順序表…

WGAN(Wassertein GAN)

WGAN E x ~ P g [ log ? ( 1 ? D ( x ) ) ] E x ~ P g [ ? log ? D ( x ) ] \begin{aligned} & \mathbb{E}_{x \sim P_g}[\log (1-D(x))] \\ & \mathbb{E}_{x \sim P_g}[-\log D(x)] \end{aligned} ?Ex~Pg??[log(1?D(x))]Ex~Pg??[?logD(x)]? 原始 GAN …

springboot基于Java的超市進銷存系統+ LW+ PPT+源碼+講解

第三章系統分析與設計 3.1 可行性分析 一個完整的系統&#xff0c;可行性分析是必須要有的&#xff0c;因為他關系到系統生存問題&#xff0c;對開發的意義進行分析&#xff0c;能否通過本網站來補充線下超市進銷存管理模式中的缺限&#xff0c;去解決其中的不足等&#xff0c…

6域名系統DNS

《計算機網絡》第7版&#xff0c;謝希仁 每次記不清楚的知識點&#xff0c;通過上網查找&#xff0c;總是只能看到很零碎的答案。最后還是最喜歡看這個版本的書&#xff0c;一看就回憶起來了&#xff0c;邏輯嚴謹&#xff0c;循循善誘&#xff0c;知識講解的全面又清晰&#xf…

架構師應該在團隊中發揮怎樣的作用?

架構師分為5種&#xff1a; 1.企業架構師EA(Enterprise Architect) EA的職責是決定整個公司的技術路線和技術發展方向。 2.基礎結構架構師IA(Infrastructure Architect) IA的工作就是提煉和優化技術方面積累和沉淀形成的基礎性的、公共的、可復用的框架和組件&#xff0c;這…

Qt 基礎組件速學 鼠標和鍵盤事件

學習目標&#xff1a; 鼠標事件和鍵盤事件應用 前置環境 運行環境:qt creator 4.12 學習內容和效果演示&#xff1a; 1.鼠標事件 根據鼠標的坐標位置&#xff0c;做出對應的事件。 2.鍵盤事件 根據鍵盤的輸入做出對應操作 詳細主要代碼 1.鼠標事件 #include "main…

一文讀懂輕量日志收集系統Loki工作原理

Loki 是由 Grafana Labs 開發的日志聚合系統&#xff0c;設計目標是提供一種高效、低成本的日志收集和查詢解決方案。與傳統的日志系統&#xff08;如 ELK Stack&#xff09;不同&#xff0c;Loki 不會對日志內容進行索引&#xff0c;而是僅對日志的元數據進行索引&#xff0c;…

美國大帶寬服務器租用優勢和注意事項

美國大帶寬服務器租用對于需要處理大量數據和提供高速網絡服務的企業至關重要。下面將詳細討論美國大帶寬服務器租用的優勢、適用場景及注意事項&#xff0c;rak部落小編為您整理發布美國大帶寬服務器租用的優勢和注意事項。 優勢 1. 高速數據傳輸&#xff1a; - 大帶寬服務器提…

FTP、http 、tcp

HTTP VS FTP HTTP &#xff1a;HyperText Transfer Protocol 超文本傳輸協議&#xff0c;是基于TCP協議 FTP&#xff1a; File Transfer Protocol 文件傳輸協議&#xff0c; 基于TCP協議&#xff0c; 基于UDP協議的FTP 叫做 TFTP HTTP 協議 通過一個SOCKET連接傳輸依次會話數…

FIND_IN_SET使用案例--[sql語句根據多ids篩選出對應數據]

一 FIND_IN_SET select id,system_ids from intellect_client_info where FIND_IN_SET(5, system_ids) > 0;

Spring Boot 中的監視器是什么?有什么作用?

前言&#xff1a; 監聽器相信熟悉 Spring、Spring Boot 的都知道&#xff0c;但是監視器又是什么&#xff1f;估計很多人一臉懵的狀態&#xff0c;本篇分享一下 Spring Boot 的監視器。 Spring Boot 系列文章傳送門 Spring Boot 啟動流程源碼分析&#xff08;2&#xff09; …

Apache DolphinScheduler 與 AWS 的 EMR/Redshift 集成實踐分享

引言 這篇文章將給大家講解關于DolphinScheduler與AWS的EMR和Redshift的集成實踐&#xff0c;通過本文希望大家能更深入地了解AWS智能湖倉架構&#xff0c;以及DolphinScheduler在實際應用中的重要性。 AWS智能湖倉架構 首先&#xff0c;我們來看一下AWS經典的智能湖倉架構圖…

【第20章】MyBatis-Plus邏輯刪除支持

文章目錄 前言一、邏輯刪除的工作原理二、支持的數據類型三、使用方法1.配置全局邏輯刪除屬性2.在實體類中使用 TableLogic 注解 四、常見問題解答1. 如何處理插入操作&#xff1f;2. 刪除接口自動填充功能失效怎么辦&#xff1f; 五、實戰1. 全局配置2. 添加TableLogic3. 自動…

高考選專業,興趣與就業前景該如何平衡?

從高考結束的那一刻開始&#xff0c;有些家長和學生就已經變得焦慮了&#xff0c;因為他們不知道成績出來的時候學生應該如何填報志愿&#xff0c;也不知道選擇什么樣的專業&#xff0c;畢竟大學里面的專業豐富多彩&#xff0c;如何選擇確實是一門學問&#xff0c;而對于學生們…

Oracle的RECYCLEBIN回收站:輕松恢復誤刪對象

目錄 Oracle的RECYCLEBIN回收站&#xff1a;輕松恢復誤刪對象一、概念二、工作原理三、使用方法1 查看回收站中的對象2 恢復回收站中的對象2.1 恢復表&#xff08;TABLE&#xff09;2.2 恢復索引&#xff08;INDEX&#xff09;2.3 恢復視圖&#xff08;VIEW&#xff09;2.4 恢復…

樂清網站建設規劃書

樂清是位于浙江省溫州市的一個縣級市&#xff0c;擁有悠久的歷史和豐富的文化底蘊。隨著互聯網的快速發展&#xff0c;網站建設成為推動樂清經濟和文化發展的重要手段。因此&#xff0c;我們認為有必要制定一個全面的樂清網站建設規劃書&#xff0c;以促進樂清的經濟繁榮和文化…