SpringCache

发布时间 2023-10-11 14:06:45作者: Liming_Code

前言

SpringCache是Spring提供的一整套的缓存解决方案,它不是具体的缓存实现,它只提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案。提供了多种缓存实现方式,如Ehcache、Redis、Guava等。
ConcurrentMapCache是Spring 内置默认的缓存实现。
image

Spring Cache入门

使用Spring Cache也比较简单,简单总结就是3步:加依赖,开启缓存、加注解。

1、加依赖

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

2、启动类上添加@EnableCaching注解

3、加注解

常用注解
@Cacheable:在方法执行前查看是否有缓存对应的数据,如果有直接返回数据,如果没有调用方法获取数据返回,并缓存起来。
@CacheEvict:将一条或多条数据从缓存中删除。
@CachePut:将方法的返回值放到缓存中。

SpringBoot集成Caffeine

1、新建一个SpringBoot项目
2、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>

3、修改配置文件

spring:
  cache:
    type: caffeine

4、添加配置类


@Configuration
public class CaffeineCacheConfig {
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .initialCapacity(100)
                .maximumSize(10000))
        ;
        return cacheManager;
    }
}

SpringBoot集成Redis Cache

1、新建一个SpringBoot项目

2、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

3、修改配置文件

spring:
  cache:
    type: redis
    redis:
      time-to-live: "10s"
  data:
    redis:
      host: 127.0.0.1
      database: 1
      lettuce:
        pool:
          min-idle: 5
          max-active: 5000
          max-idle: 10
          max-wait: 1000ms

4、添加配置类

@EnableCaching
@Configuration
public class CacheConfiguration {

    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        // 使用缓存的默认配置
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        // 使用 GenericJackson2JsonRedisSerializer 作为序列化器
        config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config);
        return builder.build();
    }
}