亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

小伙伴們大家好,緩存是提升系統(tǒng)性能的一個(gè)不可或缺的工具,通過(guò)緩存可以避免大部分重復(fù)的請(qǐng)求到數(shù)據(jù)庫(kù)層,減少I(mǎi)O鏈接次數(shù),提升整體的響應(yīng)速率;具體的緩存工具可以分為本地緩存和分布式緩存(比如 redis),優(yōu)先使用本地緩存,因?yàn)橐话闱闆r下使用分布式緩存有點(diǎn)大材小用了;本地緩存中比較常見(jiàn)的比如 Caffeine 緩存,這篇文章將結(jié)合具體的 Springboot 項(xiàng)目搭配 Caffeine 實(shí)現(xiàn)本地緩存的各種使用方式

一、Caffeine

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

在 Spring Framework 中,通常通過(guò) Spring Cache 抽象來(lái)使用 Caffeine 緩存,常用的注解包括:

@Cacheable

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

@CachePut

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

@CacheEvict

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

二、項(xiàng)目實(shí)踐

2.1 環(huán)境準(zhǔn)備

后續(xù)測(cè)試是基于一個(gè)可運(yùn)行的 SpringBoot 項(xiàng)目,通過(guò) ApiPost 模擬請(qǐng)求測(cè)試緩存接口

2.2 項(xiàng)目搭建

2.2.1 依賴(lài)引入 + 配置

在項(xiàng)目的 pom.xml 文件中添加以下依賴(lài),然后點(diǎn)擊 Maven 刷新,Maven 會(huì)從配置的遠(yuǎn)程倉(cāng)庫(kù)中自動(dòng)下載并導(dǎo)入依賴(lài)包

	<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è)置了緩存的類(lèi)型以及自定義的緩存參數(shù),比如過(guò)期時(shí)間

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

另外不要忘了在啟動(dòng)類(lèi)上加開(kāi)啟緩存的注解

2.2.2 測(cè)試接口

因?yàn)?Caffeine 常用的注解有三個(gè),所以這里三個(gè)測(cè)試接口分別測(cè)試每種注解的使用

第一個(gè)測(cè)試接口對(duì)應(yīng)的是 @Cacheable 注解的使用,value 指明緩存的名稱(chēng)為 data , key 利用 Spring EL 表達(dá)式與請(qǐng)求參數(shù)中的 "s" 相關(guān)聯(lián),方法作用就是打印當(dāng)前時(shí)間

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("查詢(xún)到數(shù)據(jù):"+ time);
        return " 查詢(xún)到數(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("存儲(chǔ)數(shù)據(jù):"+ time);
        return " 存儲(chǔ)數(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 接口測(cè)試

2.3.1 測(cè)試 @Cacheable 注解

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

2.3.2 測(cè)試 @CachePut 注解

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

2.3.3 測(cè)試 @CacheEvict 注解

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

三、章末

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

相關(guān)文章

最新評(píng)論