当前位置: 首页 > article >正文

浅谈Spring Boot之缓存处理

在Spring Boot中处理缓存,可以通过以下几个步骤来实现:

1、添加依赖

首先,需要在项目的pom.xml文件中添加spring-boot-starter-cache依赖,以启用Spring Boot的缓存支持。

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

2、开启缓存管理

在配置类或启动类上添加@EnableCaching注解,以开启缓存管理功能。

@Configuration
@EnableCaching
public class CacheConfig {
    // 缓存配置
}

3、配置缓存管理器

可以通过实现CacheManager接口或使用CacheManagerCustomizer接口来自定义缓存管理器的行为。例如,使用ConcurrentMapCacheManager作为缓存管理器。

@Configuration
public class CacheManagerConfig {
    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("cache1", "cache2");
    }
}

4、使用缓存注解:Spring Boot支持多种缓存注解,包括@Cacheable@CachePut@CacheEvict,用于控制方法级别的缓存行为。

  • @Cacheable:触发缓存填充。如果缓存中没有数据,则执行方法并将结果存入缓存。

@Cacheable(cacheNames = "cacheName", key = "#key")
public Object someMethod(String key) {
    // 方法逻辑
}

  • @CachePut:更新缓存而不干扰方法执行。

@CachePut(cacheNames = "cacheName", key = "#key")
public Object someMethod(String key) {
    // 方法逻辑
}

  • @CacheEvict:触发缓存失效。

@CacheEvict(cacheNames = "cacheName", key = "#key")
public void someMethod(String key) {
    // 方法逻辑
}

5、配置特定缓存提供者

如果需要使用特定的缓存提供者,如Redis、Caffeine等,可以通过设置spring.cache.type属性来指定。

spring.cache.type=redis

6、自定义缓存配置

对于不同的缓存提供者,如Redis、Caffeine等,可以通过定义特定的配置类来自定义缓存的行为。例如,对于Redis,可以定义RedisCacheManagerBuilderCustomizer来自定义缓存的TTL(生存时间)。

@Configuration
public class RedisCacheConfig {
    @Bean
    public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer() {
        return builder -> builder
            .withCacheConfiguration("cache1", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)))
            .withCacheConfiguration("cache2", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(1)));
    }
}


http://www.kler.cn/a/405241.html

相关文章:

  • AbsPlus框架介绍2
  • 使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
  • 【PCIE常见面试问题-1】
  • JSONObject jsonObject = JSON.parseObject(json);
  • linux 常用命令指南(存储分区、存储挂载、docker迁移)
  • 一篇快速上手 Axios,一个基于 Promise 的网络请求库(涉及原理实现)
  • 初识C++:指针与引用的异同,inline关键字
  • Spring Boot整合Tomcat底层源码分析
  • Jtti:如何知晓服务器的压力上限?具体的步骤和方法
  • Three.js 闪电效果
  • 【2024最新】基于springboot+vue的疫情网课管理系统lw+ppt
  • js批量输入地址获取经纬度
  • 04 —— Webpack打包CSS代码
  • Vue项目开发 formatData 函数有哪些常用的场景?
  • 当你项目服务器磁盘报警
  • 如何利用Python爬虫精准获得1688店铺详情
  • Android 文件分段上传和下载方案
  • 兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
  • Java Servlet详解:Servlet的生命周期、请求处理与响应发送
  • css使用弹性盒,让每个子元素平均等分父元素的4/1大小
  • AI大模型系列之一:大模型原理科普(深度好文)
  • 「San」监听DOM变化的方法
  • 基于SpringBoot和uniapp开发的医护上门系统上门护理小程序
  • linux增量更新
  • 第2章-PostgreSQL 15安装及登录
  • 遗传算法与深度学习实战(22)——使用Numpy构建神经网络