欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Caffeine實現(xiàn)本地緩存的實踐分享

 更新時間:2024年07月14日 08:55:24   作者:在比薩斜塔吃披薩  
緩存是提升系統(tǒng)性能的一個不可或缺的工具,通過緩存可以避免大部分重復的請求到數(shù)據(jù)庫層,減少IO鏈接次數(shù),提升整體的響應速率,本地緩存中比較常見的比如 Caffeine 緩存,這篇文章將結合具體的 Springboot 項目搭配 Caffeine 實現(xiàn)本地緩存的各種使用方式

前言

小伙伴們大家好,緩存是提升系統(tǒng)性能的一個不可或缺的工具,通過緩存可以避免大部分重復的請求到數(shù)據(jù)庫層,減少IO鏈接次數(shù),提升整體的響應速率;具體的緩存工具可以分為本地緩存和分布式緩存(比如 redis),優(yōu)先使用本地緩存,因為一般情況下使用分布式緩存有點大材小用了;本地緩存中比較常見的比如 Caffeine 緩存,這篇文章將結合具體的 Springboot 項目搭配 Caffeine 實現(xiàn)本地緩存的各種使用方式

一、Caffeine

Caffeine 是一個現(xiàn)代化的 Java 緩存庫,設計用于提供高性能和可伸縮性的本地緩存解決方案。適用于高并發(fā)以及快速訪問數(shù)據(jù)的場景,因為內(nèi)部實現(xiàn)了基于 ConcurrentHashMap 的數(shù)據(jù)結構,從而保證并發(fā)訪問時的線程安全和高性能。

在 Spring Framework 中,通常通過 Spring Cache 抽象來使用 Caffeine 緩存,常用的注解包括:

@Cacheable

用于標記方法可以使用緩存。當方法被調(diào)用時,Spring 會首先檢查緩存中是否存在對應的數(shù)據(jù),如果存在則直接返回緩存中的數(shù)據(jù),否則執(zhí)行方法并將返回值存入緩存。

@CachePut

用于更新緩存中的數(shù)據(jù)。與 @Cacheable 不同的是,@CachePut 注解的方法始終會執(zhí)行,并將執(zhí)行結果存入指定的緩存中,適用于更新操作后需要同步更新緩存的場景。

@CacheEvict

用于從緩存中移除一個或多個條目??梢酝ㄟ^指定的 key 或條件來移除緩存中的數(shù)據(jù),常用于執(zhí)行刪除操作后清除相應的緩存條目,以保證數(shù)據(jù)一致性。

二、項目實踐

2.1 環(huán)境準備

后續(xù)測試是基于一個可運行的 SpringBoot 項目,通過 ApiPost 模擬請求測試緩存接口

2.2 項目搭建

2.2.1 依賴引入 + 配置

在項目的 pom.xml 文件中添加以下依賴,然后點擊 Maven 刷新,Maven 會從配置的遠程倉庫中自動下載并導入依賴包

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-cache</artifactId>
	</dependency>
     <dependency>
        <groupId>com.github.ben-manes.caffeine</groupId>
        <artifactId>caffeine</artifactId>
        <version>2.5.5</version>
    </dependency>
 

在 .properties 配置文件中 加入以下配置,設置了緩存的類型以及自定義的緩存參數(shù),比如過期時間

spring.cache.type=caffeine
spring.cache.caffeine.spec=initialCapacity=10,maximumSize=200,expireAfterWrite=30s

另外不要忘了在啟動類上加開啟緩存的注解

2.2.2 測試接口

因為 Caffeine 常用的注解有三個,所以這里三個測試接口分別測試每種注解的使用

第一個測試接口對應的是 @Cacheable 注解的使用,value 指明緩存的名稱為 data , key 利用 Spring EL 表達式與請求參數(shù)中的 "s" 相關聯(lián),方法作用就是打印當前時間

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.time.LocalDateTime;
 
/**
 * @author HuangBen 
 */
@RestController
@RequestMapping("/cache")
public class CachController {
 
    @Cacheable(value = "data",key = "#s")
    @GetMapping("/get")
    public String getData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("查詢到數(shù)據(jù):"+ time);
        return " 查詢到數(shù)據(jù) :" + time;
 
    }
 
    @CachePut(value = "data",key = "#s")
    @GetMapping("/put")
    public String putData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("存儲數(shù)據(jù):"+ time);
        return " 存儲數(shù)據(jù) :" + time;
 
    }
 
    @CacheEvict(value = "data",key = "#s")
    @PostMapping("/rem")
    public String remData(String s){
        LocalDateTime now = LocalDateTime.now();
        String time = now.toString();
        System.out.println("清除數(shù)據(jù) :"+time);
        return " 清除數(shù)據(jù) :" + time;
    }
 
}

2.3 接口測試

2.3.1 測試 @Cacheable 注解

通過模擬請求,可以看到成功創(chuàng)建緩存,并且在三十秒內(nèi)重復請求的話,直接返回緩存中的數(shù)據(jù)并不會重新執(zhí)行方法體,從控制臺只打印了一條日志也可以體現(xiàn)

2.3.2 測試 @CachePut 注解

@CachePut 注解的特性就是每次都進到方法體,然后執(zhí)行結束后會進行緩存刷新,這一點可以從測試 @Cacheable 注解體現(xiàn),執(zhí)行完一次 cacheput 操作后,之前的接口返回的緩存也是 CachePut 接口產(chǎn)生的數(shù)據(jù)

2.3.3 測試 @CacheEvict 注解

@CacheEvict 注解的主要作用是清除指定的緩存,通常用于刪除數(shù)據(jù)的業(yè)務邏輯之后,一并清除緩存;這里可以通過控制臺信息體現(xiàn),先使用 Cacheput 操作產(chǎn)生緩存,然后調(diào)用 CacheEvict 清除緩存,再通過 Cacheable 操作查詢緩存,結果顯示并未查詢到 CachePut 中產(chǎn)生的緩存數(shù)據(jù)

三、章末

以上就是SpringBoot整合Caffeine實現(xiàn)本地緩存的實踐分享的詳細內(nèi)容,更多關于SpringBoot Caffeine本地緩存的資料請關注腳本之家其它相關文章!

相關文章

  • Java開發(fā)之內(nèi)部類對象的創(chuàng)建及hook機制分析

    Java開發(fā)之內(nèi)部類對象的創(chuàng)建及hook機制分析

    這篇文章主要介紹了Java開發(fā)之內(nèi)部類對象的創(chuàng)建及hook機制,結合實例形式分析了java基于hook機制內(nèi)部類對象的創(chuàng)建與使用,需要的朋友可以參考下
    2018-01-01
  • 淺談java+內(nèi)存分配及變量存儲位置的區(qū)別

    淺談java+內(nèi)存分配及變量存儲位置的區(qū)別

    下面小編就為大家?guī)硪黄獪\談java+內(nèi)存分配及變量存儲位置的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java判空的一些常見方法

    Java判空的一些常見方法

    這篇文章主要給大家分享介紹了Java判空的一些常見方法,在程序中必須進行嚴格的判空處理,避免對空對象的異常操作,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • SpringBoot Controller中的常用注解

    SpringBoot Controller中的常用注解

    這篇文章主要介紹了SpringBoot Controller中的常用注解,文章圍繞主題展開詳細的內(nèi)容介紹,具有有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 基于Java實現(xiàn)雙向鏈表

    基于Java實現(xiàn)雙向鏈表

    這篇文章主要為大家詳細介紹了基于Java實現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java學習之路_篇超好的文章

    java學習之路_篇超好的文章

    一篇超好的文章!就看你有沒耐心看!java學習之路!
    2008-10-10
  • 使用dom4j解析xml文件,并轉出json格式問題

    使用dom4j解析xml文件,并轉出json格式問題

    這篇文章主要介紹了使用dom4j解析xml文件,并轉出json格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 最有價值的50道java面試題 適用于準入職Java程序員

    最有價值的50道java面試題 適用于準入職Java程序員

    這篇文章主要為大家分享了最有價值的50道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結構和算法相關的題目、經(jīng)典面試編程題等,對hashCode方法的設計、垃圾收集的堆和代進行剖析,感興趣的小伙伴們可以參考一下
    2016-05-05
  • IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題

    IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題

    這篇文章主要介紹了IDEA2022.1創(chuàng)建maven項目規(guī)避idea2022新建maven項目卡死無反應問題,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    jvm垃圾回收之GC調(diào)優(yōu)工具分析詳解

    這篇文章主要為大家介紹了jvm垃圾回收之GC調(diào)優(yōu)工具的分析詳解,在進行JVM?GC性能調(diào)優(yōu)之前,需要使用某些工具獲取到當前應用的狀態(tài)信息
    2022-01-01

最新評論