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

SpringCache緩存處理詳解

 更新時(shí)間:2023年09月12日 09:38:25   作者:小鐘要學(xué)習(xí)?。?!  
這篇文章主要介紹了SpringCache緩存處理詳解,SpringCache是一個(gè)框架,實(shí)現(xiàn)了基于注解緩存功能,只需要簡單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能,需要的朋友可以參考下

SpringCache緩存處理

學(xué)習(xí)過redis的都知道redis緩存是一個(gè)很不錯(cuò)的nosql,對(duì)于上線項(xiàng)目正的有很大的幫助,平常在java中使用一般都是通過 jedis 或者 spring-boot-starter-data-redis 所提供的依賴進(jìn)行開發(fā),具體的api還需要我們手動(dòng)的去調(diào)用實(shí)現(xiàn),下面的SpringCache將會(huì)為我們使用注解的形式來快速使用redis

1、SpringCache介紹

SpringCache是一個(gè)框架,實(shí)現(xiàn)了基于注解緩存功能,只需要簡單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能。 SpringCache提高了一層抽象,底層可以切換不同的cache實(shí)現(xiàn),具體就是通過cacheManager接口來統(tǒng)一不同的緩存技術(shù) cacheManager是spring提供的各種緩存技術(shù)抽象接口 針對(duì)不同的緩存技術(shù)需要實(shí)現(xiàn)不同的cacheManager接口

CacheManager描述
EhCacheCacheManager使用EhCache作為緩存技術(shù)
GuavaCaceManager使用Google的GuavaCache作為緩存技術(shù)
RedisCacheManager使用Redis作為緩存技術(shù)

2、Spring Cache常用注解

注解說明
@EnableCaching開啟緩存注解功能
@Cacheable在方法執(zhí)行前spring先查看緩存中是否有數(shù)據(jù),如果有數(shù)據(jù),則直接返回緩存數(shù)據(jù);若沒有數(shù)據(jù),調(diào)用方法并將方法返回值放到緩存中
@CachePut將方法的返回值放到緩存中
@CacheEvict將一個(gè)或多條數(shù)據(jù)從緩存中刪除

在springboot項(xiàng)目中,使用緩存技術(shù)只需要在項(xiàng)目中導(dǎo)入相關(guān)的緩存技術(shù)包,并在啟動(dòng)類上使用@EnableCaching注解開啟緩存技術(shù)支持即可 例如:使用redis作為緩存技術(shù),只需要導(dǎo)入spring-data-redis的maven坐標(biāo)即可

3、SpringCache快速入門

下面幾步的案例都是基于SpringCache底層的Map存儲(chǔ),當(dāng)服務(wù)器重啟的時(shí)候就會(huì)清空,在下面第4段的時(shí)候會(huì)講解如何存儲(chǔ)到redis

3.1、在啟動(dòng)類上開redis注解緩存技術(shù)

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
@Slf4j
@SpringBootApplication
@ServletComponentScan
@EnableCaching
public class ReggieApplication {
    public static void main(String[] args) {
        SpringApplication.run(ReggieApplication.class);
    }
}

3.2、在控制器中注入CacheManager

/**
* 注入注解緩存接口
*/
@Autowired
private CacheManager cacheManager;

3.3、在具體的方法中使用注解完成緩存添加

這里的控制器使用的是mybatisplus框架提供的接口業(yè)務(wù)更具id修改數(shù)據(jù)。 對(duì)于注解的 key 是一個(gè)重點(diǎn),詳細(xì)的官方介紹如下

/**
* CachePut:將方法返回的值放入緩存中
* value:緩存的名稱,每一個(gè)緩存名稱下面可以有多個(gè)key
* key:緩存的key,重點(diǎn)靈活配置
*/
@CachePut(value = "userCache",key = "#users.id")
@GetMapping()
public User get(User user){
   User users= dishService.updateById(user);
     return users;
}

用于動(dòng)態(tài)計(jì)算密鑰的 Spring 表達(dá)式語言 (SpEL) 表達(dá)式。 默認(rèn)為 {@code “”},這意味著所有方法參數(shù)都被視為一個(gè)鍵,除非已設(shè)置自定義 {@link keyGenerator}。 SpEL 表達(dá)式根據(jù)提供以下元數(shù)據(jù)的專用上下文進(jìn)行評(píng)估: {@code result} 用于對(duì)方法調(diào)用結(jié)果的引用。對(duì)于 {@code Optional} 等受支持的包裝器,{@code result} 指的是實(shí)際對(duì)象,而不是包裝器 {@code root.method}、{@code root.target} 和 {@ code root.caches} 分別用于引用 {@link java.lang.reflect.Method 方法}、目標(biāo)對(duì)象和受影響的緩存。 方法名稱的快捷方式({@code root. methodName})和目標(biāo)類({@code root.targetClass})也可用。 方法參數(shù)可以通過索引訪問。例如,可以通過 {@code root.args[1]}、{@code p1} 或 {@code a1} 訪問第二個(gè)參數(shù)。如果該信息可用,也可以按名稱訪問參數(shù)。

3.4、沖緩存中刪除數(shù)據(jù)【刪除和修改方法使用】

下面列舉了三種獲取key值的方法,選擇哪一種都可以

/**
* CacheEvict:清理指定緩存
* value:緩存的名稱,每一個(gè)緩存名稱下面可以有多個(gè)key
* key:緩存的key,重點(diǎn)靈活配置
*/
// @CacheEvict(value = "userCache",key = "#p0")
// @CacheEvict(value = "userCache",key = "#root.args[0]")
@CacheEvict(value = "userCache",key = "#id")
@DeletMapping("/{id}")
public void get(@PathVariable Long id){
   dishService.removeById(id);
}

3.5、查看緩存數(shù)據(jù),沒有就添加

如果緩存中有數(shù)據(jù)就不執(zhí)行方法直接放回,沒有緩存數(shù)據(jù)就添加,同時(shí)添加了一個(gè)判斷條件,當(dāng)返回值不為空的時(shí)候再進(jìn)行添加緩存

/*
* unless:滿足條件不緩存
* condition:滿足條件時(shí)才緩存
* 
*/
// @CacheEvict(value = "userCache",key = "#p0")
// @CacheEvict(value = "userCache",key = "#root.args[0]")
@Cacheable(value = "userCache",key = "#users.id",unless= "#result == bull")
@GetMapping("/{id}")
public User get(@PathVariable Long id){
   User users = userService.getById(id);
   return users;
}

4、Spring Cache緩存到Redis中

4.1、導(dǎo)入maven坐標(biāo)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--使用注解完成緩存技術(shù)-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

這里的操作redis是必須要有 spring-boot-starter-data-redis 依賴包的

在這里插入圖片描述

4.2、在application.yml配置文件中配置Redis

spring:
  # 配置redis鏈接學(xué)習(xí)
  redis:
    host: localhost
    port: 6379
    database: 0 # 操作的庫(有12個(gè))
    jedis:
      pool:
        max-active: 8 # 最大鏈接數(shù)據(jù)
        max-wait: 1ms # 連接池最大阻塞等待時(shí)間
        max-idle: 4 # 連接線中最大的空閑鏈接
        min-idle: 0 # 連接池中最小空閑鏈接
   cache:
    redis:
      time-to-live: 1800000 # 緩存的過期時(shí)間

到此這篇關(guān)于SpringCache緩存處理詳解的文章就介紹到這了,更多相關(guān)SpringCache緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中字符串去重的特性介紹

    Java中字符串去重的特性介紹

    這篇文章主要介紹了Java中字符串去重的特性,是Java8中引入的一個(gè)新特性,至于是否真的用起來順手就見仁見智了...需要的朋友可以參考下
    2015-07-07
  • Java中scheduleAtFixedRate的用法

    Java中scheduleAtFixedRate的用法

    如何正確使用Java中的scheduleAtFixedRate是一篇介紹Java中定時(shí)任務(wù)調(diào)度器的文章。它詳細(xì)介紹了scheduleAtFixedRate方法的用法、參數(shù)及作用,并給出了一些實(shí)例以幫助讀者更好地理解其使用。本文為Java開發(fā)人員提供了一些實(shí)用的技巧,幫助他們更好地管理和控制定時(shí)任務(wù)
    2023-04-04
  • Java線程的聯(lián)合用法實(shí)例分析

    Java線程的聯(lián)合用法實(shí)例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結(jié)合實(shí)例形式分析了java線程聯(lián)合的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • 深入淺析Java 循環(huán)中標(biāo)簽的作用

    深入淺析Java 循環(huán)中標(biāo)簽的作用

    這篇文章主要介紹了深入淺析Java 循環(huán)中標(biāo)簽的作用的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Mybatis批量修改的操作代碼

    Mybatis批量修改的操作代碼

    這篇文章主要介紹了Mybatis批量修改的操作代碼,包括整體批量修改的詳細(xì)代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2017-09-09
  • MyBatis-Plus分頁時(shí)排序的實(shí)現(xiàn)方法

    MyBatis-Plus分頁時(shí)排序的實(shí)現(xiàn)方法

    這篇文章主要介紹了MyBatis-Plus分頁時(shí)的排序,分頁時(shí)排序的方法,后端OrderItems排序、Wrapper排序前端指定排序,文章結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • SpringBoot框架實(shí)現(xiàn)支付和轉(zhuǎn)賬功能

    SpringBoot框架實(shí)現(xiàn)支付和轉(zhuǎn)賬功能

    在 Spring Boot 框架中實(shí)現(xiàn)支付和轉(zhuǎn)賬功能時(shí),涉及到多個(gè)細(xì)節(jié)和注意點(diǎn),這些功能通常需要高度的安全性、穩(wěn)定性和可擴(kuò)展性,本文介紹了實(shí)現(xiàn)支付和轉(zhuǎn)賬功能的一些關(guān)鍵點(diǎn),需要的朋友可以參考下
    2024-08-08
  • Springboot跨域問題三種解決方案

    Springboot跨域問題三種解決方案

    這篇文章主要介紹了Springboot跨域問題三種解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解

    基于Java 注解(Annotation)的基本概念詳解
    2013-04-04
  • SpringBoot中的CSRF攻擊及預(yù)防方法

    SpringBoot中的CSRF攻擊及預(yù)防方法

    CSRF攻擊是一種常見的網(wǎng)絡(luò)攻擊方式,可以通過欺騙用戶來執(zhí)行惡意操作,在Spring Boot應(yīng)用程序中,我們可以采取多種措施來預(yù)防CSRF攻擊,本文將給大家介紹一下CSRF攻擊以及如何預(yù)防攻擊,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

遂溪县| 仙居县| 赤城县| 凤凰县| 炉霍县| 富顺县| 望江县| 永登县| 韶关市| 苍山县| 德令哈市| 平顶山市| 息烽县| 鸡泽县| 聊城市| 开远市| 区。| 武功县| 芜湖县| 内黄县| 三河市| 商都县| 尤溪县| 辉县市| 东港市| 调兵山市| 泰安市| 登封市| 广丰县| 宝丰县| 长白| 威宁| 鹿泉市| 麦盖提县| 阿拉善右旗| 汝城县| 老河口市| 江口县| 江门市| 石河子市| 台南市|