SpringBoot专题学习Part25:Spring Cache缓存抽象的使用(@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)

本文深入探讨了SpringBoot中的Spring Cache缓存抽象,包括JSR-107规范介绍、SpringCache的核心接口和注解的详细说明。通过实例解析了@Cacheable、@CachePut、@CacheEvict的使用,以及如何配置自定义的key生成器。开启缓存功能后,利用注解实现缓存数据、更新数据和清除缓存的操作,提高系统性能。
摘要由CSDN通过智能技术生成

一、概念

缓存是每个系统都应该考虑的功能 用于加速系统的访问和提升系统的性能

例如一个电商网站的商品信息 如果每次都要查询数据库 耗时过大
此时 可以引入一个缓存中间件 将商品数据信息放入缓存中 就不用查询数据库了 直接查询缓存即可
缓存中若有 则直接使用 缓存中若没有 则查询数据库 并将数据信息放入缓存中
因为 应用程序和缓存的交互是非常快的 速度比查询数据库要快的多 尤其是数据库庞大的情况下

或者处理临时数据 比如验证码 三分钟有效 用完即删除
那么这些数据可以放入缓存中 系统从缓存中存取即可 若到时间则从缓存中删除
应用场景非常广泛

1、JSR-107

为了统一缓存的开发规范 并提升系统的扩展性
J2EE发布了JSR-107缓存规范

Java Caching定义了5个核心接口 分别为CachingProviderCacheManagerCacheEntryExpiry
其中:

  • CachingProvider(缓存提供者)定义 创建 配置 获取 管理和控制多个CacheManager(缓存管理器)
    一个应用可以在运行期访问多个CachingProvider

  • CacheManager(缓存管理器)定义 创建 配置 获取 管理和控制多个唯一命名的Cache
    这些Cache存在于CacheManager的上下文中
    一个CacheManager仅能被一个CachingProvider所拥有

  • Cache(缓存)是一个类似Map的数据结构并临时存储以Key为索引的值
    一个Cache仅能被一个CacheManager所拥有

  • Entry是一个存储在Cache中的key-value键值对

  • Expiry有效期
    每一个存储在Cache中的条目有一个定义的有效期 一旦超过这个时间 条目即为过期状态
    一旦过期 则条目将不可访问 更新和删除
    缓存有效期可通过ExpiryPolicy设置

在这里插入图片描述
JSR-107定义的都是一些接口 这样 类似于JDBC 直接面向接口编程
然鹅 但并不是市面上所有的缓存组件都提供了JSR-107的实现
若无类似的实现 则须自己写相应的实现
因此JSR-107的使用并不是很多

2、SpringCache缓存抽象

Spring从3.1之后引入了基于注解的缓存技术 本质并不是一个具体的缓存实现方案 而是一个对缓存使用的抽象
通过在既有代码中添加其定义的注解 即能够达到缓存的效果

定义了org.springframework.cache.Cacheorg.springframework.cache.CacheManager这两个接口来统一不同的缓存技术
并支持使用JCache(JSR-107)注解来简化开发
在这里插入图片描述

①、类
  • Cache缓存接口 用于定义缓存操作
    它的实现有RedisCache EhCacheCache ConcurrentMapCache等
    Cache接口的实现不同 则使用的缓存技术也不同
  • CacheManager缓存管理器 用于管理各种缓存组件(Cache)
②、注解
  • @Cacheable:对方法添加该注解 能够根据方法的请求参数对其结果进行缓存
    被该注解标注的结果将被缓存
    例:
@Cacheable
public User getUser(Integer id)
  • @CacheEvict:清空缓存
    例:
@CacheEvict
public void deleteUser(Integer id)
  • @CachePut:保证方法被调用 又希望结果被缓存
    用于缓存更新
    例:
@CachePut
publit User updateUser(User user)
  • @EnableCaching:标注在启动类上 开启基于注解的缓存

二、使用

在用向导创建项目的时候要引入Spring Cache模块
在这里插入图片描述
或者自己添加依赖:

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

然后 在主程序类上加上@EnableCaching注解 开启基于注解的缓存

注:必须开启 否则无法使用缓存
@MapperScan("net.zjitc.springboot.mapper")
@SpringBootApplication
@EnableCaching
public class SpringbootCacheApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(SpringbootCacheApplication.class, args);
    }
}

之后就是在方法上添加相应的缓存注解了:
在案例中 我用的是MyBatis 当然 其它持久层框架也可以

1、@Cacheable注解:

使用@Cacheable注解 将方法的运行结果进行缓存
之后再需要获取相同的数据时 直接可从缓存中获取

@Service
public c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值