Spring Cache 介绍

这篇具有很好参考价值的文章主要介绍了Spring Cache 介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Cache 是 Spring 提供的的缓存解决方案,它并非是一个具体的缓存实现,而是和 JSR107 类似的一套缓存规范,基于注解并与 Spring 的无缝集成。本文主要介绍其基本概念及简单使用。

1、简介

1.1、Spring Cache 概述

Spring Cache 是 Spring 提供的一种缓存抽象机制,用于简化应用中的缓存操作。它通过将方法的返回值缓存起来,当下次调用同一方法时,如果传入的参数与之前的调用相同,就可以直接从缓存中获取结果,而不需要再执行方法体中的代码,提高了系统的性能和响应速度。

Spring Cache 的特点:
声明式缓存:通过在方法上添加注解,如 @Cacheable、@CachePut、@CacheEvict 等来声明缓存的行为,无需手动编写缓存代码。
多种缓存支持:Spring Cache 提供了对多种缓存框架的支持,包括 Redis、Ehcache、Guava Cache、Caffeine 等,可以根据需要选择合适的缓存实现。
缓存策略配置:可以通过配置文件或者编程方式来配置缓存的策略,包括缓存的过期时间、缓存的淘汰策略等。
注解灵活应用:通过在方法上添加不同的注解,可以实现缓存的读取、更新和清除等操作,根据业务需求进行灵活配置。
缓存切面自动代理:Spring Cache 通过 AOP 技术,利用代理模式在方法执行前后拦截,自动处理缓存相关的操作,对业务代码无侵入。

1.2、Spring Cache 注解

注解 说明
@Cacheable 标记在方法上,表示方法的返回值会被缓存。当方法被调用时,会先检查缓存中是否存在对应的结果,如果存在,则直接返回缓存中的值,如果不存在,则执行方法体,并将返回值缓存起来。
@CachePut 标记在方法上,表示方法的返回值会被缓存。不同于 @Cacheable,@CachePut 每次都会执行方法体,并将返回值缓存起来;它通常用于更新缓存。
@CacheEvict 标记在方法上,表示清除缓存项。通过设置不同的属性来清除的相应缓存项,通过 key 属性来清除特定键的缓存项,通过 allEntries 属性来清除所有缓存项。
@Caching 用于多个缓存操作的组合,可以同时使用 @Cacheable、@CachePut 和 @CacheEvict 等注解。
@CacheConfig 标记在类上,用于指定该类中所有方法的缓存相关配置,包括缓存名称、缓存管理器等。

这些注解通过声明式的方式来管理缓存,通过在方法上添加相应的注解,可以方便地实现缓存的读取、更新和清除等操作。同时,Spring Cache 还支持使用 SpEL 表达式来动态地指定缓存的 Key 和条件等。开发者可以根据具体的业务需求选择合适的注解来配置缓存行为。

2、Spring Cache 使用

Spring Boot 中使用 Spring Cache 大概有以下步骤。

2.1、引入相关依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.18</version>
    <relativePath />
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
</dependencies>

2.2、启用缓存

在启动类上添加 @EnableCaching 注解。

@SpringBootApplication
@EnableCaching
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2.3、引入并配置具体的缓存实现

2.3.1、Caffeine 作为缓存实现

A、引入依赖

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>

B、配置缓存(application.yml)

spring:
  cache:
    type: caffeine
    caffeine:
      spec: maximumSize=1000,expireAfterWrite=3s

spec 的配置属性可参考 com.github.benmanes.caffeine.cache.CaffeineSpec 类。

2.3.2、JCache 作为缓存实现

JCache 也是缓存规范,这里使用 Ehcache3 作为其缓存实现。

A、引入依赖

<dependency>
    <groupId>javax.cache</groupId>
    <artifactId>cache-api</artifactId>
</dependency>
<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
</dependency>

B、配置缓存(application.yml)

spring:
  cache:
    type: jcache
    jcache:
      config: classpath:ehcache3.xml

C、ehcache3 配置(ehcache3.xml)

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
        xmlns="http://www.ehcache.org/v3"
        xsi:schemaLocation="http://www.ehcache.org/v3
        http://www.ehcache.org/schema/ehcache-core-3.10.xsd
        http://www.ehcache.org/v3/jsr107
        http://www.ehcache.org/schema/ehcache-107-ext-3.10.xsd">

    <persistence directory="D:\temp"/>

    <cache alias="myCache">
        <key-type>java.lang.Integer</key-type>
        <value-type>java.lang.String</value-type>
        <expiry>
            <tti unit="minutes">5</tti>
        </expiry>
        <resources>
            <heap unit="MB">10</heap>
            <offheap unit="MB">50</offheap>
            <disk persistent="true" unit="MB">500</disk>
        </resources>
    </cache>
</config>

2.4、缓存使用

根据需要在方法上添加相应注解即可。

package com.abc.general.service.impl;

import com.abc.general.service.ICacheService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.*;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class CacheServiceImpl implements ICacheService {
    @Cacheable(cacheNames = "myCache", key = "#id")
    @Override
    public String queryById(int id) {
        log.info("queryById,id={}", id);
        return "value" + id;
    }

    @CachePut(cacheNames = "myCache", key = "#id")
    @Override
    public String updateById(int id, String newValue) {
        log.info("updateById,id={},newValue={}", id, newValue);
        return newValue;
    }

    @CacheEvict(cacheNames = "myCache", key = "#id")
    @Override
    public void deleteById(int id) {
        log.info("deleteById,id={}", id);
    }
}

 文章来源地址https://www.toymoban.com/news/detail-855053.html

到了这里,关于Spring Cache 介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三、Spring Cache + Redis 缓存数据

    Spring Cache 是一个非常优秀的缓存组件。自Spring 3.1起,提供了类似于@Transactional注解事务的注解Cache支持,且提供了Cache抽象,方便切换各种底层Cache(如:redis) 使用Spring Cache的好处:  1,提供基本的Cache抽象,方便切换各种底层Cache;  2,通过注解Cache可以实现类似于事务

    2024年02月05日
    浏览(36)
  • 【SpringBoot篇】使用Spring Cache高效处理缓存数据

    Spring Cache是一个框架,只要简单加一个注解,就能实现缓存功能。Spring Cache是Spring Framework提供的一个模块,它为应用程序添加了缓存支持。通过使用Spring Cache,你可以在方法级别上定义缓存规则,将方法的返回结果缓存起来,以提高方法调用的性能和响应速度。 是一个框架,只要简

    2024年02月05日
    浏览(56)
  • spring boot整合cache使用Ehcache 进行数据缓存

    之前的文章 spring boot整合 cache 以redis服务 处理数据缓存 便捷开发 带着大家通过spring boot整合了 cache 缓存 那么 我们就来说说 其他服务的缓存 而spring boot默认的缓存方案就是 cache 用simple模式 spring boot的强大在于它的整合能力 它将其他缓存技术整合 统一了接口 简单说 所有的

    2024年02月19日
    浏览(40)
  • Springboot—Spring Cache 缓存方案详解及代码-Ehcache

    Spring从3.1开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术; 并支持使用 JCache(JSR-107) 注解简化我们开发。 常用的缓存实现有 RedisCache 、EhCache、ConcurrentMapCache 、Guava Cache( 谷歌) 等。 Spring Cache是一个框架,实现了基于注解的

    2024年02月03日
    浏览(41)
  • 8.10 用redis实现缓存功能和Spring Cache

    什么是缓存? 缓存(Cache), 就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码。 通过Redis来缓存数据,减少数据库查询操作; 逻辑 每个分类的菜品保存一份缓存数据 数据库菜品数据有变更时清理缓存数据 如何将商品数据缓存起来。 控

    2024年02月13日
    浏览(66)
  • Spring Boot 3.0系列【25】数据篇之Spring Cache缓存技术使用详解

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.5 源码地址:https://gitee.com/pearl-organization/study-spring-boot3

    2023年04月14日
    浏览(36)
  • Spring Boot 3.2项目中使用缓存Cache的正确姿势!!!

    你是否曾想过为什么在 Spring Boot 应用中缓存是如此重要?答案在于它通过减少数据检索时间来提高性能。在本文中,我们将深入探讨缓存对微服务模式的影响,并探讨根据操作易用性、速度、可用性和可观测性等因素选择正确缓存的重要性。我们还将探讨如何最大程度地提高

    2024年02月05日
    浏览(69)
  • Spring Cache 介绍

    Spring Cache 是 Spring 提供的的缓存解决方案,它并非是一个具体的缓存实现,而是和 JSR107 类似的一套缓存规范,基于注解并与 Spring 的无缝集成。本文主要介绍其基本概念及简单使用。 Spring Cache 是 Spring 提供的一种缓存抽象机制,用于简化应用中的缓存操作。它通过将方法的

    2024年04月22日
    浏览(27)
  • Spring Framework 提供缓存管理器Caffeine

    Spring Framework 提供了一个名为 Caffeine 的缓存管理器。Caffeine 是一个基于 Java 的高性能缓存库,被广泛用于处理大规模缓存数据。 使用 Caffeine 缓存管理器,可以轻松地在 Spring 应用程序中添加缓存功能。它提供了以下主要特性: 快速响应:Caffeine 使用内存作为缓存存储,相较

    2024年02月15日
    浏览(36)
  • Spring Cache的介绍以及怎么使用(redis)

    1、Spring Cache介绍 Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能. Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过 CacheManager 接口来统一不同的缓存技术。CacheManager是Spring提供的各种缓存技术抽象接口

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包