SpringCache的介紹和入門案例

文章目錄

  • 概述
  • 常用注解
  • 入門案例

概述

Spring Cache是Spring框架提供的一個緩存抽象層,用于在應用程序中實現緩存的功能。它通過在方法執行前檢查緩存中是否已經存在所需數據,如果存在則直接返回緩存中的數據,如果不存在則執行方法體,將方法的返回值存儲到緩存中,以便后續的請求可以直接從緩存中獲取數據。

Spring Cache的主要特性如下:

  1. 聲明式緩存:通過使用注解或XML配置的方式,可以很方便地將緩存邏輯應用到方法上。開發人員只需要在需要被緩存的方法上添加相應的注解,如@Cacheable、@CachePut等,Spring框架會自動處理緩存的讀取和更新操作。

  2. 緩存注解支持:Spring Cache提供了多種緩存注解,包括@Cacheable、@CachePut、@CacheEvict等,用于標記具體的方法需要進行緩存的讀取、更新和清除操作。通過這些注解,開發人員可以靈活地控制緩存的行為和策略。

  3. 多種緩存技術支持:Spring Cache支持多種常見的緩存技術,如Ehcache、Redis、Caffeine等。開發人員可以根據實際需求選擇合適的緩存提供商,并通過簡單的配置即可接入相應的緩存技術。

  4. 緩存管理器:Spring Cache提供了緩存管理器的抽象,可以統一管理和配置應用程序中的緩存。開發人員可以通過配置文件或編程方式定義緩存管理器的屬性和行為,以滿足不同環境和需求的緩存配置。

  5. 可擴展性:Spring Cache具有良好的可擴展性,支持自定義緩存注解和緩存操作的實現。開發人員可以根據自己的需求擴展并定制Spring Cache的功能,以適應特定的業務場景。

使用Spring Cache可以有效地減少重復計算和數據庫訪問等耗時操作,提升系統的響應速度和性能。它提供了簡單而強大的API和注解,使得開發人員能夠更加輕松地實現緩存功能,并與Spring框架的其他模塊無縫集成。

常用注解

在SpringCache中提供了很多緩存操作的注解,常見的是以下的幾個:

注解說明
@EnableCaching開啟緩存注解功能,通常加在啟動類上
@Cacheable在方法執行前先查詢緩存中是否有數據,如果有數據,則直接返回緩存數據;如果沒有緩存數據,調用方法并將方法返回值放到緩存中
@CachePut將方法的返回值放到緩存中
@CacheEvict將一條或多條數據從緩存中刪除

在spring boot項目中,使用緩存技術只需在項目中導入相關緩存技術的依賴包,并在啟動類上使用@EnableCaching開啟緩存支持即可。

例如,使用Redis作為緩存技術,只需要導入Spring data Redis的maven坐標即可。

入門案例

下面是一個使用Redis作為緩存技術的Spring Cache入門案例:

首先,確保在項目的依賴中添加以下相關依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

接下來,你需要在Spring Boot的配置文件(如application.properties或application.yml)中添加Redis的連接信息,例如:

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=

然后,你可以創建一個UserService接口,用于定義用戶相關的服務方法:

public interface UserService {User getUserById(Long id);
}

接著,創建一個實現了UserService接口的UserServiceImpl類:

@Service
public class UserServiceImpl implements UserService {@Override@Cacheable(value = "users", key = "#id")public User getUserById(Long id) {// 模擬從數據庫或其他數據源獲取用戶信息System.out.println("查詢數據庫獲取用戶信息,用戶ID:" + id);return new User(id, "John Doe");}
}

在上述代碼中,我們使用了@Cacheable(value = "users", key = "#id")注解來標記getUserById方法需要進行緩存。這里的"users"是緩存名稱,表示將結果緩存到名為"users"的緩存中,key = "#id"表示緩存的key是方法的參數id。

最后,你可以編寫一個簡單的測試類來驗證緩存的效果:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@Testpublic void testGetUserById() {// 第一次調用,會執行方法內部的邏輯,從數據庫中查詢用戶信息User user1 = userService.getUserById(1L);System.out.println(user1);// 第二次調用,應該從緩存中獲取用戶信息,不再執行方法內部的邏輯User user2 = userService.getUserById(1L);System.out.println(user2);}
}

在上述測試代碼中,第一次調用getUserById方法時,會執行方法內部的邏輯,從數據庫中查詢用戶信息。而第二次調用時,由于結果已經緩存在名為"users"的緩存中,所以直接從緩存中獲取用戶信息,不再執行方法內部的邏輯。

通過以上方式,我們就可以使用Redis作為緩存技術來實現方法級別的緩存功能了。當然,在實際項目中,你還可以根據需求進一步配置緩存管理器、緩存策略等。

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

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

相關文章

定義行業新標準?谷歌:折疊屏手機可承受20萬次折疊

根據Patreon賬戶上的消息&#xff0c;Android專家Mishaal Rahman透露&#xff0c;谷歌計劃推出新的硬件質量標準&#xff0c;以滿足可折疊手機市場的需求。Android原始設備制造商&#xff08;OEM&#xff09;將需要完成谷歌提供的問卷調查&#xff0c;并提交樣品設備進行嚴格審…

MySQL慢查詢日志常用參數配置

慢查詢日志 slow log&#xff1a;指query time減去lock time的時間&#xff0c;超過設置的閾值的查詢SQL。 常用配置 #通用配置需配置在mysqld標簽先&#xff0c;版本獨有配置在mysqld-version標簽下 [mysqld] #是否開啟慢日志,Type:Boolean Default Value:OFF slow_log0/1…

基于 JMeter API 開發性能測試平臺

目錄 背景&#xff1a; 常用的 JMeter 類和功能的解釋&#xff1a; JMeter 編寫性能測試腳本的大致流程示意圖&#xff1a; 源碼實現方式&#xff1a; (1) 環境初始化 (2) 環境初始化 (3) 創建測試計劃 (4) 創建 ThreadGroup (5) 創建循環控制器 (6) 創建 Sampler (…

【編碼魔法師系列_六大原則5】迪米特原則(Law of Demeter Principle)

學會設計模式&#xff0c;你就可以像擁有魔法一樣&#xff0c;在開發過程中解決一些復雜的問題。設計模式是由經驗豐富的開發者們&#xff08;GoF&#xff09;凝聚出來的最佳實踐&#xff0c;可以提高代碼的可讀性、可維護性和可重用性&#xff0c;從而讓我們的開發效率更高。通…

每日一題——旋轉數組的最小數字(II)

旋轉數組的最小數字——II 題目鏈接 注&#xff1a;此題是昨天旋轉數組的最小數字——I的拓展延伸&#xff0c;昨天題目數組的條件是不會存在重復元素&#xff0c;而本題數組的元素可以重復&#xff0c;因此建議先做前面一題&#xff0c;進行思考&#xff0c;這樣求解這一題的…

【單片機畢業設計3-基于stm32c8t6的智能家居系統】

【單片機畢業設計3-基于stm32c8t6的智能家居系統】 前言一、功能介紹二、硬件部分三、軟件部分總結 前言 &#x1f525;這里是小殷學長&#xff0c;單片機畢業設計篇3 基于stm32的智能家居控制系統 &#x1f9ff;創作不易&#xff0c;拒絕白嫖&#xff08;有需可點擊最后鏈接&a…

Python自動化測試框架:Pytest和Unittest的區別

pytest和unittest是Python中常用的兩種測試框架&#xff0c;它們都可以用來編寫和執行測試用例&#xff0c;但兩者在很多方面都有所不同。本文將從不同的角度來論述這些區別&#xff0c;以幫助大家更好地理解pytest和unittest。 1. 原理 pytest是基于Python的assert語句和Pytho…

consul安裝啟動流程

普通軟件包安裝 首先cd /opt &#xff0c;將安裝包放到該目錄下 下載consul安裝包 進入consul官網找到自己開發平臺對應的安裝包下載 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

vue3 table動態合并,自定義參數合并單元格

<template><div><el-table :data"tableData" :span-method"objectSpanMethod" border:header-cell-style"{ textAlign: center}"><el-table-column prop"area" label"區域" align"center"&g…

HW樣本《關于“XXXX”微信視頻號發布短視頻的信息說明.exe》的逆向分析

一、概述 樣本運行后會釋放《關于“XXXX”微信視頻號發布短視頻的信息說明.doc》并打開&#xff1b;同時釋放ncloud.exe惡意文件并啟動&#xff1b;調用cmd命令刪除樣本母體&#xff1b;其中ncloud.exe會從互聯網下載類似字母表的數據解密出CS木馬&#xff0c;在內存加載并運行…

《玩轉Python數據分析專欄》大綱

歡迎來到《玩轉Python數據分析分類專欄》&#xff01;在這個專欄中&#xff0c;我們將帶您深入探索數據分析的世界&#xff0c;以Python為工具&#xff0c;解析各個領域的實際應用場景。通過100篇教程&#xff0c;我們將逐步引領您從入門級到高級&#xff0c;從基礎知識到實戰技…

前端安全:探秘安全 HTTP 頭的設置

在當今數字化時代&#xff0c;前端安全至關重要。除了應對常見的攻擊方式外&#xff0c;通過設置安全 HTTP 頭&#xff0c;我們可以加強網站的安全性&#xff0c;減少潛在的威脅。本文將為您詳細解釋什么是安全 HTTP 頭&#xff0c;以及如何通過設置它們來保護您的前端應用。 1…

真就逮住23屆了使勁薅唄,24屆笑了

作者&#xff1a;阿秀 InterviewGuide大廠面試真題網站&#xff1a;https://top.interviewguide.cn 小伙伴們大家好&#xff0c;我是阿秀。 最近在朋友圈看到不少動態說"24屆明顯好轉"的消息&#xff0c;也收到不少私信問是不是24屆的相比于23屆好多了&#xff0c;更…

深度學習階段性回顧

本文針對過去兩周的深度學習理論做階段性回顧&#xff0c;學習資料來自吳恩達老師的2021版deeplearning.ai課程&#xff0c;內容涵蓋深度神經網絡改善一直到ML策略的章節。視頻鏈接如下&#xff1a;吳恩達深度學習視頻鏈接 &#xff08;注&#xff1a;本文出自深度學習初學者&a…

Vue中如何更好地封裝組件?

子組件接受父組件傳遞的事件 1.子組件使用事件名"$emit(父組件中傳遞的事件名,想給父組件傳遞的參數(可選))" click"$emit(click)" 2.子組件使用 v-on"$listeners" 父組件&#xff1a; <template><div id"app"><myCo…

MyBatis的XML映射文件

Mybatis的開發有兩種方式&#xff1a; 注解 XML配置文件 通過XML配置文件的形式來配置SQL語句&#xff0c;這份兒XML配置文件在MyBatis當中也稱為XML映射文件。 導學&#xff1a;在MyBatis當中如何來定義一份兒XML映射文件&#xff1f; 在MyBatis當中&#xff0c;定義XML…

使用 HTML、CSS 和 JavaScript 創建多步驟表單

使用 HTML、CSS 和 JavaScript 創建多步驟表單 為了處理又長又復雜的表單&#xff0c;我們需要將它們分成多個步驟。通過一次只在屏幕上顯示一些輸入&#xff0c;表單會感覺更容易理解&#xff0c;并防止用戶感到被大量的表單字段淹沒。 在本文中&#xff0c;我將逐步指導如何…

有哪些可能引起前端安全的問題?

跨站腳本 (Cross-Site Scripting, XSS) ?種代碼注??式,為了與 CSS 區分所以被稱作 XSS。早期常?于?絡論壇, 起因是?站沒有對?戶的輸?進?嚴格的限制, 使得攻擊者可以將腳本上傳到帖?讓其他?瀏覽到有惡意腳本的??, 其注??式很簡單包括但不限于 JavaScript / CSS …

基礎堆排序(Java 實例代碼)

目錄 基礎堆排序 一、概念及其介紹 二、適用說明 三、過程圖示 四、Java 實例代碼 src/runoob/heap/Heapify.java 文件代碼&#xff1a; 基礎堆排序 一、概念及其介紹 堆排序&#xff08;Heapsort&#xff09;是指利用堆這種數據結構所設計的一種排序算法。 堆是一個近…

Linux_5_Shell腳本編程

目錄 1 基礎1.1 程序組成1.2 程序編程風格1.3 編程語言1.4 編程邏輯處理方式 2 shell 腳本語言的基本結構2.1 shell腳本的用途2.2 shell腳本基本結構2.3 創建shell腳本過程2.4 腳本注釋規范2.5 第一個腳本2.6 腳本調試2.7 變量2.7.1 變量2.7.2 變量類型2.7.3 編程語言分類2.7.4…